63

ノードのドライバーを使用して ObjectID が有効かどうかを確認するにはどうすればよいですか

私は試した :

var BSON = mongo.BSONPure;
console.log("Validity: "  + BSON.ObjectID.isValid('ddsd'))

しかし、true または false ではなく例外が発生し続けます。(例外は、単に 'throw e; // process.nextTick エラー、または最初のティックでの 'error' イベント' です。

4

8 に答える 8

95

これは簡単なチェックです - 100% 誰にでもできるわけではありません

24 個の 16 進文字の文字列を確認する場合は、この正規表現を使用できます。

var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$")

checkForHexRegExp.test("i am a bad boy")
// false
checkForHexRegExp.test("5e63c3a5e4232e4cd0274ac2")
// true

github.com/mongodb/js-bson/.../objectid.tsから取得した正規表現


より良いチェックを使用するには:

var ObjectID = require("mongodb").ObjectID

ObjectID.isValid("i am a bad boy")
// false
ObjectID.isValid("5e63c3a5e4232e4cd0274ac2")
// true

isValidコードgithub.com/mongodb/js-bson/.../objectid.ts

于 2012-08-16T14:18:06.600 に答える
10

使用している場合はmongoose、他のライブラリに依存するのではなく、検証に mongoose を使用できます。

if (!mongoose.Types.ObjectId.isValid(req.id)) {
    return res.status(400).send("Invalid object id");
}
于 2019-04-13T16:54:09.207 に答える
9

@GianPaJ のスニペットは素晴らしいですが、16 進数以外の objectID をカバーするために少し拡張する必要があります。同じファイルの 32 行目は、objectID の長さも 12 文字にすることができることを示しています。これらのキーは、mongodb ドライバーによって 24 文字の 16 進数の ObjectID に変換されます。

function isValidObjectID(str) {
  // coerce to string so the function can be generically used to test both strings and native objectIds created by the driver
  str = str + '';
  var len = str.length, valid = false;
  if (len == 12 || len == 24) {
    valid = /^[0-9a-fA-F]+$/.test(str);
  }
  return valid;
}
于 2013-08-31T11:07:26.880 に答える
-2

Cerberusを使用してカスタム関数を作成し、検証と ObjectId を行うことができます

from cerberus import Validator
import re

class CustomValidator(Validator): 
    def _validate_type_objectid(self, field, value):
        """ 
        Validation for `objectid` schema attribute.

        :param field: field name.
        :param value: field value.
        """
        if not re.match('[a-f0-9]{24}', str(value)):
            self._error(field, ERROR_BAD_TYPE % 'ObjectId')

## Initiate the class and validate the information
v = CustomValidator()

schema = {
    'value': {'type': 'objectid'}
}
document = {
    'value': ObjectId('5565d8adba02d54a4a78be95')
}

if not v(document, schema):
    print 'Error'
于 2015-06-23T23:02:34.497 に答える