美好的一天,
我正在创建一个javascript函数来从数据库中排除某些代码。 例如,以下是有效代码:
换句话说,我希望代码只包含字母数字。我在Chrome中打开了控制台并尝试了:
> re = new RegExp('\w+')
> re.test('whatever')
true
> re.test('what???')
true
> var test = new RegExp('^\w+')
> test.test('what')
true
> test.test('what999')
true
> test.test('what???')
true
所以我知道\w
可以是0-9,a-z,A-Z。如果我进入'我不知道为什么正则表达式正在通过?'当他们不应该。
我错过了什么吗?
答案 0 :(得分:1)
您误解了结果。正则表达式\w+
表示"一个或多个单词字符"。它没有指定字符串中可以找到这些字符的位置。在所有测试中,提供的字符串至少包含一个单词字符,因此它们都会通过。
您要做的是确保字符串仅包含字母数字。试试以下正则表达式:
^\w+$
细分,这意味着:
^ = match start of string
\w = letters or digits
+ = one or more of the previous element (in this case, the set) (this is greedy)
$ = match the end of the string
在英语中,这意味着,在字符串的开头和结尾之间,只有字母数字字符匹配。尽可能多地匹配,或者根本不匹配"
注意:如果您将正则表达式作为字符串编写,则需要像\
一样转义:
new RegExp("^\\w+$")
否则,JavaScript会将\w
解释为escape sequence,而不是{{3}}。您还可以使用语法
new RegExp(/^\w+$/)
在这种情况下,您不需要转义\
,因为它不是字符串。
答案 1 :(得分:0)
测试返回true,因为模式\w+
与测试字符串中的字母数字部分匹配。
re.test('what???')
将返回true,因为它与what
匹配。
如果您只想匹配仅包含字母数字字符的字符串,则应使用^\w+$
之类的字符串。