【问题标题】:Javascript test method not working ( as expected )Javascript 测试方法不起作用(如预期的那样)
【发布时间】:2013-05-15 10:50:36
【问题描述】:

正则表达式

 [A-Za-z_-]+ 

应该匹配只有大小写字母、下划线和破折号的字符串

但是当我在 chrome 控制台中运行时

 /[A-Za-z_-]+/.test("johmSmith12")

为什么它返回 true

【问题讨论】:

  • 它返回 true 因为它找到了“johnSmith”(如果您需要视觉帮助,请在此处尝试 - refiddle.com

标签: javascript regex performance


【解决方案1】:

因为您没有锚定表达式。您需要添加^$,它们匹配字符串的开头和结尾。

例如:

^[A-Za-z_-]+$

在您的示例中,[A-Za-z_-]+ 将与 johnSmith 匹配,而忽略 12(正如 David Starkey 指出的那样)。

【讨论】:

  • 我更喜欢\A\Z
  • @ted,JS 没有这些。它应该是 \z 而不是 \Z(在大多数情况下,包括 PCRE)。
【解决方案2】:

这是由于您的正则表达式在测试字符串中寻找与该正则表达式匹配的 any 字符序列。在您的示例中,"johnSmith" 匹配您的正则表达式条件,因此test 返回true

如果您改为将^(字符串开头)和$(字符串结尾)放在正则表达式的末尾,那么您会断言整个字符串必须与您的正则表达式匹配:

/^[A-Za-z_-]+$/.test("johnSmith12");

这将返回false

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多