[javascript] 유효한 UUID / GUID를 테스트하는 방법?

변수에 유효한 UUID / GUID 식별자가 포함되어 있는지 확인하는 방법은 무엇입니까?

현재 유형 1과 4의 유효성 검사에만 관심이 있지만 답변에 제한을 두어서는 안됩니다.



답변

현재 UUID는 RFC4122에 지정되어 있습니다. 종종 무시 가장자리 케이스는 언급 NIL UUID이며, 여기 . 다음 정규식에서는이를 고려하여 NIL UUID에 대한 일치 항목을 반환합니다. NIL이 아닌 UUID 만 허용하는 UUID는 아래를 참조하십시오. 이 솔루션은 모두 버전 1 ~ 5를위한 것입니다 (세번째 블록의 첫 문자 참조).

따라서 UUID를 확인하려면 …

/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i

… 버전 1에서 5까지의 정식 형식의 UUID가 있고 RFC4122에 따라 적절한 변형입니다.

참고 : 중괄호 {}정식 없습니다. 그것들은 일부 시스템과 사용법의 인공물입니다.

원래 질문의 요구 사항을 충족하기 위해 위의 정규식을 쉽게 수정할 수 있습니다.

힌트 : 정규식 그룹 / 캡처

NIL UUID가 일치하지 않도록하려면

/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i


답변

구조에 정규식

/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test('01234567-9ABC-DEF0-1234-56789ABCDEF0');

또는 괄호

/^\{?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}‌​\}?$/


답변

특정 UUID 버전을 확인하거나 확인하려면 해당 정규식이 있습니다.

참고 것이 유일한 차이점은 버전 번호 에 설명되어, 4.1.3. VersionUUID 4122 RFC는 .

버전 번호는 세 번째 그룹의 첫 번째 문자입니다. [VERSION_NUMBER][0-9A-F]{3}:

  • UUID v1 :

    /^[0-9A-F]{8}-[0-9A-F]{4}-[1][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
  • UUID v2 :

    /^[0-9A-F]{8}-[0-9A-F]{4}-[2][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
  • UUID v3 :

    /^[0-9A-F]{8}-[0-9A-F]{4}-[3][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
  • UUID v4 :

    /^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
  • UUID v5 :

    /^[0-9A-F]{8}-[0-9A-F]{4}-[5][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i

답변

개발에 Node.js를 사용하는 경우 Validator라는 패키지를 사용하는 것이 좋습니다. 여기에는 다른 버전의 UUID를 검증하는 데 필요한 모든 정규 표현식이 포함되어 있으며 검증을위한 다양한 다른 기능을 제공합니다.

npm 링크는 다음과 같습니다. Validator

var a = 'd3aa88e2-c754-41e0-8ba6-4198a34aa0a2'
v.isUUID(a)
true
v.isUUID('abc')
false
v.isNull(a)
false


답변

거의 모든 경우에 작업 수행하는 Gambol의 답변 외에도 지금까지 주어진 모든 답변은 그룹화 된 형식 (8-4-4-4-12)이 GUID를 텍스트인코딩하는 데 필수적이지는 않습니다 . 매우 자주 사용되지만 32 개의 16 진 숫자로 된 일반 체인도 유효합니다. [1] 정규식 enh :

/^[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$/i

[1] 질문에 관한 검사 보내고 가변 우리는 물론 사용자가 비우호적 인 형태를 포함해야하므로들.


답변

지금까지 게시 된 모든 유형별 정규 표현식은 RFC 4.1.7에 다음과 같이 정의 된 “유형 0″Nil UUID에서 실패합니다.

nil UUID는 128 비트를 모두 0으로 설정하도록 지정된 특수한 형태의 UUID입니다. 00000000-0000-0000-0000-000000000000

Wolf의 답변을 수정하려면 :

/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-5][0-9a-f]{3}-?[089ab][0-9a-f]{3}-?[0-9a-f]{12}$/i

또는 0이없는 “유형 0″을 올바르게 제외하기 위해 다음과 같은 결과를 얻습니다 (Luke에게 감사).

/^(?:[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a‌​-f]{3}-?[0-9a-f]{12}‌​|00000000-0000-0000-‌​0000-000000000000)$/‌​i


답변

약간의 수정으로 @usertatha 덕분에

function isUUID ( uuid ) {
    let s = "" + uuid;

    s = s.match('^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$');
    if (s === null) {
      return false;
    }
    return true;
}