【问题标题】:rails validation format regex fails in rubularrails验证格式正则表达式在rubular中失败
【发布时间】:2012-03-29 08:01:06
【问题描述】:

我正在使用以下正则表达式对 Rails 模型添加验证检查:

validates :reference, :presence => true, :format => { :with => /^[a-zA-Z0-9_. ]*$/i }

此检查将匹配任何非字母数字字符并忽略下划线和点。

在 rubular.com 上进行测试时,正则表达式无法匹配上述任何模式。相反,rubular 匹配使用这个正则表达式:

/[^a-zA-Z0-9_. ]/i

有谁知道两者之间的差异背后的原因是什么?

谢谢

【问题讨论】:

    标签: ruby-on-rails regex validation


    【解决方案1】:

    ^ 有两种含义。在括号外使用时,表示“行以”开头。在括号内使用时,表示匹配的是相反的。我觉得我不清楚:[a-z] 将匹配每个小写字母,而 [^a-z] 将匹配除小写字母之外的任何内容。

    【讨论】:

    • 你也可以说[^...]否定了字符类[...]。我不知道这是否更清楚。
    • 我不完全确定是这种情况。前往 rubular.com 并尝试两者:带有 [^...] 的匹配非 alpha 字符,而带有 ^[..] 的则不匹配。
    • 正如@muistooshort 所说,[^...] 否定了字符类[...]^[...] 不应该与 [^...] 相反。这是正则表达式语法中存在歧义的一种情况,但您会习惯的。 rubular 底部的备忘单应该可以帮助您保持清晰
    • @cnicolaou: /^[a-z]/ 匹配任何以'a'到'z'开始的东西,/[^a-z]/匹配任何不包含的东西>“a”到“z”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多