使用Javascript正则表达式

时间:2016-02-24 21:15:22

标签: 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')
  true
> test.test('what999')
  true
> test.test('what???')
  true

所以我知道\w可以是0-9,a-z,A-Z。如果我进入'我不知道为什么正则表达式正在通过?'当他们不应该。

我错过了什么吗?

2 个答案:

答案 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

在英语中,这意味着,在字符串的开头和结尾之间,只有字母数字字符匹配。尽可能多地匹配,或者根本不匹配"

Documentation on ^ and $

注意:如果您将正则表达式作为字符串编写,则需要像\一样转义:

new RegExp("^\\w+$")

否则,JavaScript会将\w解释为escape sequence,而不是{{3}}。您还可以使用语法

new RegExp(/^\w+$/)

在这种情况下,您不需要转义\,因为它不是字符串。

答案 1 :(得分:0)

测试返回true,因为模式\w+与测试字符串中的字母数字部分匹配。

例如,

re.test('what???')将返回true,因为它与what匹配。

如果您只想匹配仅包含字母数字字符的字符串,则应使用^\w+$之类的字符串。