我想验证一下美国的电话号码。在Rubular上,正则表达式:
/^\(?([2-9][0-8][0-9])\)?[-.●]?([2-9][0-9]{2})[-.●]?([0-9]{4})$/
与字符串不匹配:
'6463976583!'
正如我所料。但是,我的Rails验证器使用regex:
validates :phone, presence: true, format: {with: /^\(?([2-9][0-8][0-9])\)?[-.●]?([2-9][0-9]{2})[-.●]?([0-9]{4})$/}
似乎允许使用相同的字符串。
有没有想过我哪里错了?
发布于 2018-02-24 04:04:32
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 one会抛出警告
如果您不能让Rails验证器工作,您可以创建一个自定义验证器方法并在那里调用您的正则表达式
https://stackoverflow.com/questions/48953874
复制相似问题