Rails验证电话号码正则表达式

时间:2014-05-08 13:20:32

标签: ruby-on-rails ruby regex validation

尝试通过添加有效的正则表达式来强化我的用户个人资料表单等,以确保使用有效的电子邮件,电话号码等。 我有以下正则表达式,在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

3 个答案:

答案 0 :(得分:2)

您在)

行结束前错过了结束括号$

试试这个:

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

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

答案 1 :(得分: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构造函数。

答案 2 :(得分:2)

@Uri和@Pedro都提到了缺少语法和正确包装正则表达式的好处。 我修复过的另一个问题是修复了“允许空白”的问题。方法需要是一个符号。下面的工作代码。

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