MongoDB ObjectID的正则表达式

 葛妹秀 发布于 2023-02-05 11:58

参考这个 SO问题,我有一个场景,我只需要匹配包含af的十六进制字符串.其他一切都不匹配.例:

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

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

2 个回答
  • 您可以使用以下正则表达式,但它不会很有效

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

    例:

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

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

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

    2023-02-05 12:00 回答
  • 从技术上讲,问题中的所有示例都可能是有效的ObjectIds.如果你必须添加一些额外的验证并且regexp是不够的,那么我的建议是检查前4个字节是否是有效的时间戳.您甚至可以验证ObjectId是否在特定时间段内生成(例如,因为您的项目已经启动等).有关详细信息,请参见ObjectId文档.

    如果对象中有另一个时间戳字段,那么也可以确保两个时间都非常接近.

    仅供参考,在MongoDB shell中,ObjectId :: getTimestamp()方法可用于从ObjectId中提取时间戳.

    2023-02-05 12:00 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有