我嘗試了類似這些字串的東西,它意外地回傳true!
- 穆罕默德22144
- 穆罕默德22145
這個功能夠可靠嗎?
mongoose.Types.ObjectId.isValid('mohamma22145')
uj5u.com熱心網友回復:
isValid()并且isValidObjectId()即使字串不是 ObjectId也回傳 true。根據檔案
如果 Mongoose 可以將給定的值轉換為 ObjectId,則回傳 true,否則回傳 false。
如果你想檢查是否是一個真正的 ObjectId,你可以使用這個 RegEx: /^[a-f\d]{24}$/i
這里的例子:
var regex = new RegExp(/^[a-f\d]{24}$/i);
const ids = ['1', 'mohamma22145', '5a934e000102030405000000', 'FFFFFFFFFFFFFFFFFFFFFFFF']
ids.forEach(id => console.log(`${id} is an ObjectId: ${regex.test(id)}`))
uj5u.com熱心網友回復:
即使對于長度為 12 的無效字串,ObjectId.isValid(id) 也會回傳 true。例如:
String ID | ObjectId.isValid(id) | Expected Validation
---------------------------------------------------------------------------
594ced02ed345b2b049222c5 | true | true
dania | false | false
toptoptoptop | true(but isnt) | false
daniandanian | true(but isnt) | false
---------------------------------------------------------------------------
為了防止這種情況,可以在默認驗證器之后添加另一個檢查,它會根據條件回傳 true 或 false,(從字串創建的新 ObjectId) 轉換為字串 === 字串即 (String)(new ObjectId(id)) == = 身份證
可以按如下方式創建一個函式來檢查字串是否是有效的 ObjectId:
// Requiring ObjectId from mongoose npm package
const ObjectId = require('mongoose').Types.ObjectId;
// Validator function
function isValidObjectId(id){
if(ObjectId.isValid(id)){
if((String)(new ObjectId(id)) === id)
return true;
return false;
}
return false;
}
// Loading testcases into array
const testStrings = [ "594ced02ed345b2b049222c5","geeks",
"toptoptoptop","geeksfogeeks"];
// Validating each test case
for(const testcase of testStrings){
if(isValidObjectId(testcase))
console.log(testcase " is a valid MongodbID");
else
console.log(testcase " is not a valid MongodbID");
}
結果將是:
String ID | ObjectId.isValid(id) | Expected Validation
---------------------------------------------------------------------------
594ced02ed345b2b049222c5 | true | true
dania | false | false
toptoptoptop | false | false
daniandanian | false | false
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330477.html
下一篇:(node:31873)UnhandledPromiseRejectionWarning:TypeError:Itemisnotaconstructor
