Javascript测试方法不工作(如预期)

Javascript测试方法不工作(如预期),javascript,regex,performance,Javascript,Regex,Performance,正则表达式 [A-Za-z_-]+ 应该匹配只有大写和小写字母、下划线和破折号的字符串 但当我在chrome控制台上运行时 /[A-Za-z_-]+/.test("johmSmith12") 为什么它返回true,因为您没有锚定表达式。您需要添加匹配字符串开头和结尾的^和$ 例如: ^[A-Za-z_-]+$ 在您的示例中,只有[A-Za-z_-]+将匹配johnSmith,而忽略12(正如David Starkey指出的)。这是因为您的正则表达式在测试字符串中查找与正则表达式匹配的

正则表达式

 [A-Za-z_-]+ 
应该匹配只有大写和小写字母、下划线和破折号的字符串

但当我在chrome控制台上运行时

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

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

例如:

^[A-Za-z_-]+$

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

这是因为您的正则表达式在测试字符串中查找与正则表达式匹配的任何字符序列。在您的示例中,
“johnSmith”
与您的正则表达式标准匹配,因此
test
返回
true

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

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

这将返回
false

它返回true,因为它会找到“johnSmith”(如果您需要视觉帮助,请在此处尝试),我更喜欢
\a
\Z
@ted,JS没有这些。而且应该是
\z
而不是
\z
(在大多数口味中,包括PCRE)。