验证需要匹配特定条件的字符串(正则表达式)?

时间:2014-04-23 07:06:52

标签: javascript regex

我想验证字符串,该字符串不应包含除下划线(_)以外的任何特殊字符。 为此,我写了下面的代码,但我无法完成它。

var string = 'pro$12';
var result = /[a-zA-Z0-9_]*/.test(string);

在上面,给定的字符串无效但我得到的结果为true。 任何身体都可以告诉我这里做错了吗?

1 个答案:

答案 0 :(得分:1)

它会返回true,因为它可以匹配pro。您可以使用match函数查看实际匹配的字符串,如下所示。

console.log(string.match(/[a-zA-Z0-9_]*/));
# [ 'pro', index: 0, input: 'pro$12' ]

即使它与任何内容都不匹配,例如,您的输入为“12美元”,它也将返回true。因为,*匹配0个或更多字符。因此,它匹配$$12之前的零个字符。 (谢谢@Jack for pointing out

所以,你真正需要的是

console.log(/^[a-zA-Z0-9_]*$/.test(string));
# false

^表示字符串的开头,$表示字符串的结尾。基本上,你告诉RegEx引擎,匹配一个只包含字符类字符的字符串,从字符串的开头和结尾开始。

注意:您可以简单地使用[a-zA-Z0-9_],而不是使用显式字符类\w。它与您提到的角色类完全相同。

从MDN Docs引用RegExp,

  

\ W

     

匹配基本拉丁字母表中的任何字母数字字符,包括下划线。相当于[A-Za-z0-9_]

     

例如,/\w/匹配'a'中的"apple," '5'"$5.28,"中的'3'

}中的"3D."

因此,您的RegEx可以像这样缩短

console.log(/^\w*$/.test(string));