Railsvalidation电话号码正则表达式

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

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

试试这个:

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

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

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

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

从文档 :

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

@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