关于this SO问题,我有一个场景,我只需要匹配包含a-f的十六进制字符串。其他所有不应匹配。示例:
checkForHexRegExp.test("112345679065574883030833"); // => false
checkForHexRegExp.test("FFFFFFFFFFFFFFFFFFFFFFFF"); // => false
checkForHexRegExp.test("45cbc4a0e4123f6920000002"); // => true
我的用例是我正在使用一组十六进制字符串,并且希望只验证那些是mongodb objectID的字符串为true。
5条答案
按热度按时间p5fdfcr11#
您可以使用以下正则表达式但它不会完全工作
示例:
但是,正如我所评论的,
112345679065574883030833
,FFFFFFFFFFFFFFFFFFFFFFFF
也是有效的十六进制表示。您应该使用
/^[a-f\d]{24}$/i
,因为它通过了以上所有测试xfyts7mz2#
我需要一个只匹配mongodb ObjectID的正则表达式
如果你需要,你必须准确地指定组成mongodb ObjectID的内容,这样我们就可以为它创建合适的正则表达式字符串。
这在技术上应该在js中工作:
js4nwp543#
从技术上讲,问题中的所有示例都可能是有效的ObjectId。如果您必须添加一些额外的验证,并且regexp还不够,那么我的建议是检查前4个字节是否是有效的时间戳。您甚至可以验证ObjectId是否已在某个时间段内生成(例如因为你的项目已经开始了)。详情请参见ObjectId documentation。
如果对象中有另一个时间戳字段,那么也可以确保两个时间非常接近。
仅供参考,在MongoDB shell中,ObjectId::getTimestamp()方法可用于从ObjectId中提取时间戳。
u91tlkcl4#
我会做这样的事
cygmwpex5#
对于那些正在寻找十六进制检查字符串的人: