如何检查变量是否包含有效的UUID/GUID标识符?
我目前只对验证类型1和4感兴趣,但这不应该成为您回答的限制。
如何检查变量是否包含有效的UUID/GUID标识符?
我目前只对验证类型1和4感兴趣,但这不应该成为您回答的限制。
当前回答
我向Apache Commons validator添加了一个UUID验证器。它还没有合并,但你可以在这里投票:
https://github.com/apache/commons-validator/pull/68
其他回答
到目前为止发布的所有类型特定的正则表达式在“type 0”Nil UUID上都失败了,在RFC的4.1.7中定义为:
nil UUID是UUID的特殊形式,指定所有128位都设置为零:00000000-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
如果使用uuid包,可以导入验证并将id传递给它
const { v4: uuidv4, validate } = require('uuid');
const { id } = request.params;
validate(id) ? true : false;
如果您使用uuid包,这个包会带来一个布尔验证函数,它会告诉您uuid是否有效。
例子:
import { validate as isValidUUID } from 'uuid';
if (!isValidUUID(tx.originId)) {
return Promise.reject('Invalid OriginID');
}
除了Gambol的答案几乎在所有情况下都能做到这一点外,迄今为止给出的所有答案都忽略了分组格式(8-4-4-12)并不是对文本中的guid编码的强制要求。它被非常频繁地使用,但显然32个十六进制数字的简单链也可以有效。[1] regexenh:
/^[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$/i
这个问题是关于检查变量的,所以我们也应该包括用户不友好的表单。
为什么。net GUID中有破折号?-堆栈溢出+接受的答案 测试和验证一个GUID (guide .us) Guid。ToString方法(字符串)(MSDN)
使用.match()方法检查String是否为UUID。
public boolean isUUID(String s){
return 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}$");
}