我尝试使用下面的代码使用jQuery来验证的十六进制值的字符串,但我得到意想不到的结果:jQuery的正则表达式返回意外的结果
var a = new RegExp("0x[a-fA-F0-9]+")
var result = a.test('0x1n')
在这种情况下,结果却返回true。我在这里错过了什么?
我尝试使用下面的代码使用jQuery来验证的十六进制值的字符串,但我得到意想不到的结果:jQuery的正则表达式返回意外的结果
var a = new RegExp("0x[a-fA-F0-9]+")
var result = a.test('0x1n')
在这种情况下,结果却返回true。我在这里错过了什么?
你需要锚来匹配字符串的开始和结束。这将使匹配对整个字符串而不是只是一个字符串的一部分的正则表达式的尝试:
var a = new RegExp("^0x[a-fA-F0-9]+$")
否则,你的正则表达式0x1
部分相匹配,并返回true
。
在另一方面,以下将是一个好一点:
var re = /^0x[a-f0-9]+$/i;
的i
标志使得它不区分大小写的,所以你不必指定a-f
和A-F
。
您的正则表达式匹配该字符串,因为您没有任何锚点。如果您将正则表达式更改为^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
结尾。
它返回true,因为您不需要整个字符串匹配该模式。试试这个:
var a = new RegExp("^0x[a-fA-F0-9]+$")
定界符?你的意思是锚吗? :) –
我不知道你在说什么... :-) – CanSpice