首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >规则正则表达式和Rails正则表达式之间的差异

规则正则表达式和Rails正则表达式之间的差异
EN

Stack Overflow用户
提问于 2018-02-24 02:09:16
回答 1查看 47关注 0票数 0

我想验证一下美国的电话号码。在Rubular上,正则表达式:

代码语言:javascript
运行
复制
/^\(?([2-9][0-8][0-9])\)?[-.●]?([2-9][0-9]{2})[-.●]?([0-9]{4})$/

与字符串不匹配:

代码语言:javascript
运行
复制
'6463976583!'

正如我所料。但是,我的Rails验证器使用regex:

代码语言:javascript
运行
复制
validates :phone, presence: true, format: {with: /^\(?([2-9][0-8][0-9])\)?[-.●]?([2-9][0-9]{2})[-.●]?([0-9]{4})$/}

似乎允许使用相同的字符串。

有没有想过我哪里错了?

EN

回答 1

Stack Overflow用户

发布于 2018-02-24 04:04:32

代码语言:javascript
运行
复制
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验证器工作,您可以创建一个自定义验证器方法并在那里调用您的正则表达式

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48953874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档