2011-10-18 71 views
0

我尝试使用下面的代码使用jQuery来验证的十六进制值的字符串,但我得到意想不到的结果:jQuery的正则表达式返回意外的结果

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

在这种情况下,结果却返回true。我在这里错过了什么?

回答

2

你需要锚来匹配字符串的开始和结束。这将使匹配对整个字符串而不是只是一个字符串的一部分的正则表达式的尝试:

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

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

在另一方面,以下将是一个好一点:

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

i标志使得它不区分大小写的,所以你不必指定a-fA-F

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结尾。

+0

定界符?你的意思是锚吗? :) –

+0

我不知道你在说什么... :-) – CanSpice

1

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

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