如何testing有效的UUID / GUID?

如何检查variables是否包含有效的UUID / GUID标识符?

我目前只对validationtypes1和4感兴趣,但是对于您的答案并不限制。

目前,UUID是在RFC4122中指定的。

因此要validationUUID …

/^[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到5的标准格式的UUID,并且是根据RFC4122的相应Variant。

注:大括号“{”和“}”不是规范的。 它们是一些系统和用法的人造物。

易于修改以上正则expression式以满足原始问题的要求。

提示:正则expression式组/捕获

正则expression式来拯救

 /^[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进行开发,则build议使用名为Validator的包。 它包括validation不同版本的UUID所需的所有正则expression式,以及用于validation的各种其他function。

这是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个hex数字的平原链可以是有效的。 [1] 正则expression式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]问题是关于检查 variables s,所以我们也应该包括用户不友好的forms。

  • 为什么.NET GUID中有破折号? 堆栈溢出加上接受的答案
  • testing并validation一个GUID (guid.us)
  • Guid.ToString方法(string) (MSDN)

如果您想检查或validation特定的UUID版本,则这里是相应的正则expression式。

请注意, 唯一的区别是版本号 ,在4.1.3. Version解释4.1.3. Version UUID 4122 RFC的 4.1.3. Version章节。

版本号是第三组的第一个字符: [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 

到目前为止发布的所有types特定的正则expression式在RFC第4.1.7节中定义的“types0”无UUID上失败:

无UUID是指定将所有128位设置为零的特殊forms的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 

检查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}$"); } 

我知道这已经被问了好几年了,但对于那些会在这里看到答案的人是我的build议。 而是使用这个语法([0-9a-f\-]{36})* 。 它只是validation一个UUID。