【问题标题】:Rails validating phone number regexRails 验证电话号码正则表达式
【发布时间】:2014-06-25 21:58:24
【问题描述】:

尝试通过添加有效的正则表达式来加强我的用户个人资料表单等,以确保使用有效的电子邮件、电话号码等。 我有以下正则表达式,在 Rubular 上测试时工作正常,但是当我将它添加到我的模型时出现语法错误,如下所示:

(^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$

validates_format_of :contactnr, with: (^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$, allow_blank => true

【问题讨论】:

    标签: ruby-on-rails ruby regex validation


    【解决方案1】:

    您在行尾 $ 之前错过了右括号 )

    试试这个:

    (^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3})$
    

    看看这个link,那里有一些英国电话号码正则表达式。

    【讨论】:

      【解决方案2】:

      Ruby 的文字正则表达式包含在 //: 中:

      validates_format_of :contactnr, with: /^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$/, allow_blank => true
      

      来自documentation

      Regexp 包含一个正则表达式,用于匹配一个模式 字符串。正则表达式是使用 /.../%r{...} 文字创建的,并且 由Regexp::new 构造函数。

      【讨论】:

        【解决方案3】:

        @Uri 和@Pedro 都有关于缺少语法和正确包装正则表达式的优点。 修复后我遇到的另一个问题是“allow_blank”方法必须是一个符号。工作代码如下。

        validates_format_of :contactnr, with: /\A((\(?0\d{4}\)?\s?\d{3}\s?\d{3})|(\(?0\d{3}\)?\s?\d{3}\s?\d{4})|(\(?0\d{2}\)?\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?\Z/, :allow_blank => true
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-18
          • 2012-02-13
          • 1970-01-01
          • 2015-09-06
          • 2016-12-23
          相关资源
          最近更新 更多