我正在尝试使用以下代码与jQuery来验证十六进制值字符串,但是我得到了意想不到的结果:
var a = new RegExp("0x[a-fA-F0-9]+")
var result = a.test('0x1n')
在这种情况下,结果实际返回true。我在这里缺少什么?
答案 0 :(得分:2)
您需要锚点来匹配字符串的开头和结尾。这将使正则表达式尝试匹配整个字符串而不仅仅是字符串的一部分:
var a = new RegExp("^0x[a-fA-F0-9]+$")
否则,您的正则表达式与0x1
部分匹配,并返回true
。
另一方面,以下情况会好一些:
var re = /^0x[a-f0-9]+$/i;
i
标志使其不区分大小写,因此您不必指定a-f
和A-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]+$")