关于this SO问题,我有一种情况,我只需要匹配包含a-f的十六进制字符串。所有其他都不应该匹配。例子:

checkForHexRegExp.test("112345679065574883030833"); // => false
checkForHexRegExp.test("FFFFFFFFFFFFFFFFFFFFFFFF"); // => false
checkForHexRegExp.test("45cbc4a0e4123f6920000002"); // => true

我的用例是我正在使用一组十六进制字符串,并且只想验证那些是mongodb objectID的字符串为true。

最佳答案

您可以使用以下正则表达式,但是不能正常工作

checkForHexRegExp = /^(?=[a-f\d]{24}$)(\d+[a-f]|[a-f]+\d)/i

例子:
> checkForHexRegExp.test("112345679065574883030833")
false
> checkForHexRegExp.test("FFFFFFFFFFFFFFFFFFFFFFFF")
false
> checkForHexRegExp.test("45cbc4a0e4123f6920000002")
true

但是,正如我所评论的,112345679065574883030833FFFFFFFFFFFFFFFFFFFFFFFF也是有效的十六进制表示形式。

您应该使用 /^[a-f\d]{24}$/i,因为它通过了上述所有测试

关于javascript - 用于MongoDB ObjectID的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20988446/

10-15 07:14