如何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。