正则表达式匹配的字符串不是有效的mongo id

时间:2017-02-14 17:06:49

标签: javascript python regex mongodb

In other posts他们解释了如何通过正则表达式匹配MongoDB对象ID。我看起来正好相反:给定一个字符串,如果不是有效的mongo对象id,则返回正数的正则表达式。换句话说,我希望匹配不是mongodb对象id的所有内容。

我认为它应该像正则表达式一样容易否定(?!),但我无法做到正确。

正则表达式应该在Javascript和Python3中工作(它可能是两个不同的正则表达式)。如果需要,我可以接受一点精度损失,字符串可以有空格但不能换行。

例如,全名(James Bond)应匹配正数,但不匹配(45cbc4a0e4123f6920000002

More about Mongodb object Ids

谢谢: - )

2 个答案:

答案 0 :(得分:0)

可能是这样:



const isNotMongoObject = id => !/^(?=[a-f\d]{24}$)(\d+[a-f]|[a-f]+\d)/i.test(id)

const testIds = [" James Bond ", "45cbc4a0e4123f6920000002", "112345679065574883030833", "FFFFFFFFFFFFFFFFFFFFFFFF", "45cbc4a0e4123f6920000002", ` James 
Bond `]
for (const id of testIds) {
  console.log(`${id} ${isNotMongoObject(id)}`)  
}




def isNotMongoObject id:
    return re.match(r"^(?=[a-f\d]{24}$)(\d+[a-f]|[a-f]+\d)", id) is not None

答案 1 :(得分:0)

在正则表达式语言中,相反的是:

^(?!(?=[a-f\d]{24}$)(\d+[a-f]|[a-f]+\d)).+

产生以下结果:

112345679065574883030833 => true
FFFFFFFFFFFFFFFFFFFFFFFF => true
45cbc4a0e4123f6920000002 => false (ie a mongo id)
112345679065574883030833 => true
James Bond => true

请参阅a demo on regex101.com 另一个(更好的?)方法是证明一个Mongo ID,然后以编程方式检查否定。