유효한 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}\}?$/
개발에 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
특정 UUID 버전을 확인하거나 확인하려면 해당 정규식이 있습니다.
참고 것이 유일한 차이점은 버전 번호 에 설명되어,
4.1.3. Version
장 UUID 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
거의 모든 경우에 작업 을 수행하는 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] 질문에 관한 검사 보내고 가변 우리는 물론 사용자가 비우호적 인 형태를 포함해야하므로들.
- .NET GUID에 대시가있는 이유는 무엇입니까? -스택 오버플로 및 허용되는 답변
- GUID (guid.us) 테스트 및 검증
- Guid.ToString 메서드 (문자열) (MSDN)
지금까지 게시 된 모든 유형별 정규 표현식은 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;
}
String이 UUID인지 확인하는 작은 방법입니다.
public boolean isUUID(String s){
return s.matches("^[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}$");
}
Java의 경우 다음은 내장 UUID 라이브러리를 사용하는 솔루션입니다.
public Boolean isUUID(String id) {
try {
UUID.fromString(id).toString().equals(id);
return true;
} catch (IllegalArgumentException | NullPointerException ex) {
return false;
}
}
더 좋은 방법은 정적 메서드 fromString을 사용하여 정규 표현식을 피하는 것입니다.
id = UUID.randomUUID();
UUID uuid = UUID.fromString(id.toString());
Assert.assertEquals(id.toString(), uuid.toString());
반면에
UUID uuidFalse = UUID.fromString("x");
java.lang.IllegalArgumentException 발생 : 잘못된 UUID 문자열 : x
참고 URL : https://stackoverflow.com/questions/7905929/how-to-test-valid-uuid-guid
'IT story' 카테고리의 다른 글
오류와 경고를 파일에 기록하는 방법은 무엇입니까? (0) | 2020.04.22 |
---|---|
Akka Streams를 시작하는 방법? (0) | 2020.04.22 |
실행중인 화면 세션에서 스크롤 백 버퍼를 늘리려면 어떻게합니까? (0) | 2020.04.22 |
* ngFor에 필터를 적용하는 방법? (0) | 2020.04.22 |
두 날짜 시간의 시차를 구하십시오. (0) | 2020.04.22 |