使用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')

你好

我正在创建一个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')
  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