你的代码没有问题。只有你的期望是有点关闭。
的RegExp.test()
说明文档中提到:
使用test()
,每当你想知道的模式是否在字符串中找到(类似于String.prototype.search()
方法[...])
的test()
方法不会验证您的整个字符串是否与正则表达式匹配,但只有匹配它的子字符串。
在其当前形式中,您的代码检查如果字符串包含从所述范围内的至少一个字符(字母,数字,或减短划线)。
如果您需要检查匹配对整个字符串,你应该使用boundaries(也许一quantifier):
/^[a-zA-Z0-9_-]+$/
^
字符串的开头匹配;
$
匹配字符串的结尾;
+
表示之前的表达式匹配一次或多次;以前的表达式是[...]
范围。
此更新后的表达式与仅包含字母,数字,破折号和小数且不为空的字符串匹配;使用*
而不是+
以允许空字符串; *
使以前的表达式匹配零次或多次。
更新:
一个更好的办法是把^
为范围的第一个字符并解释由test()
周围的其他方法的返回值。 ^
否定范围块的含义([...]
)。 [^a-zA-Z0-9_-]
匹配任何不是字母,数字,短划线或逗号的字符。
我需要返回false
当字符串只包含字符从a
到z
较低和大写字母,数字和_
和-
。
的正则表达式/[^a-zA-Z0-9_-]/
是有效的满足您的需求(它至少包含一个字符不能是字母,数字,破折号或逗号)匹配的字符串。
var re = /[^a-zA-Z0-9_-]/
alert('Valid: ' + re.test('EKyirtVHsK0')); // false
alert('Valid: ' + re.test('!%!irtVHsK0')); // true
你要逃避'-'字符类 – hindmost
@hindmost内:只有在一个位置,它可以形成一个范围内使用。也就是说,不是在字符类的开始/结束处,而是在有效范围之后。 –
你说过,当字符串只包含数字,a-z,'_'和'-'时,你应该得到'false'。你的例子中的字符串也包含其他字符,所以它应该像返回true一样。它不应该返回'false'。 –