【问题标题】:Problem with simple regex简单正则表达式的问题
【发布时间】:2011-04-30 09:17:20
【问题描述】:

我在验证规则中有以下正则表达式:

^[a-zA-Z0-9',!;?~>+&\"\-@#%*.\s]{1,1000}$

但是,我可以输入======,我认为这是不允许的。

我的想法是,- 如果没有正确逃脱或其他什么东西,可能会以某种方式造成麻烦,但这超出了我的想象。

【问题讨论】:

  • 伊顿,问个问题;你想做什么?
  • 您是否也想转义*.?我不是正则表达式专家,但我知道那些是特殊字符。
  • 在 firebug 中,返回 false。您确定这是正则表达式而不是您在其他地方拥有的胶水代码吗? /^[a-zA-Z0-9',!;?~>+&\"\-@#%*.\s]{1,1000}$/.test("======")
  • 是的,现在我测试了这个,我也得到了false。你能展示你的实际代码吗?

标签: javascript regex escaping


【解决方案1】:

您向我们展示的带有- 转义的正则表达式不接受===
但如果- 未被转义,=== 将被接受。见this

正则表达式中的- 是特殊的,如果它没有被转义并且被作为最小值和最大值参与的字符包围,则用作范围运算符:

[a-z] 匹配任何小写字符。

[-az] 匹配 -az

[az-] 匹配 -az

[a\-z] 匹配 -az

[a-c-d-f] 匹配 abc-def。第一个和最后一个 - 充当范围运算符,但中间的那个是按字面意思处理的。

在您的情况下,="-@ 范围内,因此得到匹配。

【讨论】:

    【解决方案2】:
    .
    

    匹配一切。你想要的

    \.
    

    【讨论】:

    • 确定吗?它在这些括号内:[]
    • 我也很确定这是问题所在。
    【解决方案3】:

    - 将被解释为范围指示符。如果要匹配文字 -,则需要将其放在 [] 括号内的第一个或最后一个。

    【讨论】:

      【解决方案4】:

      您的正则表达式对我来说很好,但如果我删除 - 的转义,它匹配 =。我确定你正在这样做。

      【讨论】:

        猜你喜欢
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 2013-04-01
        • 2013-11-02
        相关资源
        最近更新 更多