2017-02-14 23 views
1

In other posts MongoDBオブジェクトIDと正規表現を照合する方法について説明しています。私は逆を探しています:が有効なmongoオブジェクトIDではないでない場合、文字列、正の数を返す正規表現を与えられています。言い換えれば、私はmongodbオブジェクトIDではないものすべてにマッチしたいと思います。有効なmongo idではない正規表現のマッチング文字列

正規表現を否定(?!)するのは簡単なはずですが、私は正しいことができません。

正規表現はJavascriptとPython3で動作するはずです(正規表現は2種類あります)。私は必要に応じて、小さな精度の損失を受け入れることができますし、文字列には改行ではなくスペースを入れることができます。

例えば、フルネーム(James Bond)が正の一致している必要がありますが、ない(45cbc4a0e4123f6920000002

More about Mongodb object Ids

答えて

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 
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であるかどうかを証明してから、プログラムで否定を確認することをお勧めします。

関連する問題