我想验证美国的电话号码。在Rubular上,正则表达式:
/^\(?([2-9][0-8][0-9])\)?[-.●]?([2-9][0-9]{2})[-.●]?([0-9]{4})$/
与字符串不匹配:
'6463976583!'
正如我所料。但是,我使用正则表达式的Rails验证器:
validates :phone, presence: true, format: {with: /^\(?([2-9][0-8][0-9])\)?[-.●]?([2-9][0-9]{2})[-.●]?([0-9]{4})$/}
似乎允许使用相同的字符串。
有关我出错的地方的任何想法吗?
答案 0 :(得分:0)
pry(main)> '6463976583!'[/^\(?([2-9][0-8][0-9])\)?[-.]?([2-9][0-9]{2})[-.]?([0-9]{4})$/]?([0-9]{4})$/]
=> nil
pry(main)> '6463976583'[/^\(?([2-9][0-8][0-9])\)?[-.]?([2-9][0-9]{2})[-.]?([0-9]{4})$/]
=> "6463976583"
也许尝试使用\ A和\ Z进行ActiveRecord验证:https://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_format_of
文档提到它匹配字符串的开头和结尾与一行的开头和结尾。如果你不使用^和$代替\ A或\ Z
,我相信Rails或Rubocop会抛出警告如果你无法使用Rails验证器,你可以创建一个自定义验证器方法并在那里调用你的正则表达式