【问题标题】: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