programing

MongoDB 객체용 Regex아이디

newsource 2023. 5. 5. 09:44

MongoDB 객체용 Regex아이디

이 SO 질문과 관련하여, 저는 a-f가 포함된 16진수 문자열만 일치시키면 되는 시나리오가 있습니다.다른 모든 항목이 일치하면 안 됩니다.예:

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

내 사용 사례는 16진수 문자열 집합으로 작업 중이며 mongodb 개체인 문자열만 유효성을 검사하려는 경우입니다.신분증.

다음 정규식을 사용할 수 있지만 제대로 작동하지 않습니다.

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또한 유효한 16진수 표현입니다.

사용해야 합니다. /^[a-f\d]{24}$/i위의 모든 테스트를 통과하기 때문입니다.

mongodb Object와만 일치하는 정규식이 필요합니다.신분증

만약 당신이 그것이 필요하다면, 당신은 무엇이 mongodb Object를 구성하는지 정확히 지정해야 할 것입니다.ID. ID에 적합한 정규식 문자열을 만들 수 있습니다.


이것은 기술적으로 js에서 작동해야 합니다.

var myregexp = /^[0-9a-fA-F]{24}$/;
subject = "112345679065574883030833";

if (subject.match(myregexp)) {
    // Successful match
} else {
    // Match attempt failed
}

기술적으로, 질문의 모든 예제는 잠재적으로 유효한 ObjectId일 수 있습니다.만약 당신이 약간의 추가적인 검증을 추가해야 하고 정규식이 충분하지 않다면, 나는 처음 4바이트가 유효한 타임스탬프인지 확인하는 것을 제안합니다.특정 기간(예: 프로젝트가 시작된 이후) 동안 ObjectId가 생성되었는지 확인할 수도 있습니다.자세한 내용은 ObjectId 설명서를 참조하십시오.

개체에 다른 타임스탬프 필드가 있는 경우 두 시간이 모두 매우 가까운지 확인할 수도 있습니다.

참고로 MongoDB 에서 ObjectId::getTimestamp() 메서드를 사용하여 ObjectId에서 타임스탬프를 추출할 수 있습니다.

저는 이런 일을 할 것입니다.

function validateObjectId(id)
{
    var bool=false; 
    if(id.length==24) bool=/[a-f]+/.test(id);
    return bool;
}


> validateObjectId("112345679065574883030833")
  false
> validateObjectId("FFFFFFFFFFFFFFFFFFFFFFFF")
  false
> validateObjectId("45cbc4a0e4123f6920000002")
  true
> validateObjectId("45cbc4a0e4123f6920")
  false

언급URL : https://stackoverflow.com/questions/20988446/regex-for-mongodb-objectid