使用Javascript正则表达式过滤出特殊字符
你好 我正在创建一个javascript函数来从数据库中排除某些代码。 例如,以下是有效代码:使用Javascript正则表达式过滤出特殊字符,javascript,Javascript,你好 我正在创建一个javascript函数来从数据库中排除某些代码。 例如,以下是有效代码: FF99 1G499 RNDD 换句话说,我希望代码只包含字母数字。我用Chrome打开控制台并尝试: > re = new RegExp('\w+') > re.test('whatever') true > re.test('what???') true > var test = new RegExp('^\w+') > test.test('what')
- FF99
- 1G499
- RNDD
> 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。我不知道为什么如果我输入“?”正则表达式会通过,而它们不应该通过
我遗漏了什么吗?测试返回true,因为模式
\w+
与测试字符串中的字母数字部分匹配
例如,re.test('what???)
将返回true,因为它匹配what
如果只想匹配仅由字母数字字符组成的字符串,则应使用类似于
^\w+$
的内容 你误解了你的结果。regexp\w+/code>表示“一个或多个单词字符”。它没有指定在字符串中的什么位置可以找到这些字符。在所有测试中,提供的字符串至少包含一个单词字符,因此它们都通过
您要做的是确保字符串只包含字母数字。请尝试以下正则表达式:
^\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
解释为一个,而事实并非如此。您还可以使用语法
new RegExp(/^\w+$/)
在这种情况下,您不需要转义\
,因为它不是一个字符串。当我尝试var rex=new RegExp(“^\w+$”)时,那么rex.test('what')应该通过,但是rex.test('test?')应该失败,当第二个失败时,它们都失败了。那么,艾米,你的第一句话应该通过吗“它与what
中的w
匹配,没有其他内容:)不,它将匹配尽可能多的字符+
是贪婪运算符。@coson,请查看我的编辑。我怀疑它对您不起作用,因为\w
被视为字符转义序列。艾米,我的意思是未知转义序列扩展为“仅字符”。因此,OPs原始'\w+'
将匹配其输入中的任何和所有w
s,而不是任何单词字符。请注意,他的所有测试短语都包含一个w
——因此结果为true
。