jQuery正则表达式返回意外的结果

时间:2011-10-18 22:30:41

标签: javascript regex

我正在尝试使用以下代码与jQuery来验证十六进制值字符串,但是我得到了意想不到的结果:

var a = new RegExp("0x[a-fA-F0-9]+")
var result = a.test('0x1n')

在这种情况下,结果实际返回true。我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

您需要锚点来匹配字符串的开头和结尾。这将使正则表达式尝试匹配整个字符串而不仅仅是字符串的一部分:

var a = new RegExp("^0x[a-fA-F0-9]+$")

否则,您的正则表达式与0x1部分匹配,并返回true

另一方面,以下情况会好一些:

var re = /^0x[a-f0-9]+$/i;

i标志使其不区分大小写,因此您不必指定a-fA-F

答案 1 :(得分:1)

您的正则表达式与该字符串匹配,因为您没有任何锚点。如果您将正则表达式更改为^0x[a-fA-F0-9]+$,则字符串0x1n将不匹配。

修改:为了进一步解释您的字符串匹配的原因,您的正则表达式实际上是在尝试匹配包含0x后跟[a-fA-F0-9]中的一个或多个字符的字符串人物类。字符串0x1n包含0x,后跟1,它位于[a-fA-F0-9]字符类中。

添加锚意味着您的字符串必须以0x开头,然后以[a-fA-F0-9]字符类中的一个或多个字符结束。 0x1n将无法匹配,因为它以n结尾,而不在该字符类中。

答案 2 :(得分:1)

它返回true,因为您不需要整个字符串匹配该模式。试试这个:

var a = new RegExp("^0x[a-fA-F0-9]+$")