Regex 十六进制字符串验证错误
我试图使用正则表达式验证32个十六进制字符串:Regex 十六进制字符串验证错误,regex,Regex,我试图使用正则表达式验证32个十六进制字符串: ^[0-9A-Fa-f]+$ 但是,错误的字符串 123456789012345678901234567890gg 或 他们被接受了。原因可能是什么?只需在正则表达式中使用一个前瞻,只允许32个字符 ^(?=.{32}$)[0-9A-Fa-f]+$ ^[0-9A-Fa-f]+$允许一个或多个十六进制字符。要限制字符,您需要在前瞻(?=…)内或在设置的括号内指定字符限制{}使用 \A[A-Fa-f0-9]{32}\z 对于所有不支持\z和\
^[0-9A-Fa-f]+$
但是,错误的字符串
123456789012345678901234567890gg
或
他们被接受了。原因可能是什么?只需在正则表达式中使用一个前瞻,只允许32个字符
^(?=.{32}$)[0-9A-Fa-f]+$
^[0-9A-Fa-f]+$
允许一个或多个十六进制字符。要限制字符,您需要在前瞻(?=…)
内或在设置的括号内指定字符限制{}
使用
\A[A-Fa-f0-9]{32}\z
对于所有不支持\z和\A定位的引擎,您可以改为使用:
^[a-fA-F0-9]{32}$
你能发布更完整的代码吗?这个正则表达式在我看来很好。OP的表达式确实“允许一个或多个十六进制字符”,但它被开始和结束锚括起来。为什么他们不工作?他的正则表达式工作正常。而且他只允许32个字符。已经有一个用户发表了关于这个的评论..对不起,你是对的。我想知道是否有一些细微的错误,因为OP声明原始文件确实接受了
gg
结尾字符串。(但不需要前瞻。)“开始”和“结束”的常用锚定是OP使用的:^
和$
。状态\A
和\Z
在所有GREP版本中都不受支持,尤其是Javascript。OP没有指定引擎
^[a-fA-F0-9]{32}$