Mar*_*era 224 javascript validation uuid guid
如何检查变量是否包含有效的UUID/GUID标识符?
我目前只对验证类型1和类型4感兴趣,但它并不限制你的答案.
小智 367
目前,UUID是RFC4122中规定的.
因此要验证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
Run Code Online (Sandbox Code Playgroud)
...确保您拥有版本1到5的规范格式化UUID,并且是符合RFC4122的相应变体.
注:括号{和}不规范.它们是某些系统和用法的工件.
易于修改上述正则表达式,以满足原始问题的要求.
提示:正则表达式组/捕获
con*_*bug 57
如果您使用 uuid 包,该包会带来一个布尔验证函数,它会告诉您 uuid 是否有效。
例子:
import { validate as isValidUUID } from 'uuid';
if (!isValidUUID(tx.originId)) {
return Promise.reject('Invalid OriginID');
}
Run Code Online (Sandbox Code Playgroud)
rya*_*anb 56
正义表达救援
/^[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');
Run Code Online (Sandbox Code Playgroud)
或括号
/^\{?[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}??\}?$/
Run Code Online (Sandbox Code Playgroud)
小智 32
如果您使用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
Run Code Online (Sandbox Code Playgroud)
Iva*_*ele 28
如果要检查或验证特定的UUID版本,请使用以下相应的正则表达式.
请注意,唯一的区别是版本号,在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
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)Sou*_*ieb 21
感谢@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;
}
Run Code Online (Sandbox Code Playgroud)
Wol*_*olf 12
除了几乎在所有情况下都能完成这项工作的Gambol的答案之外,到目前为止给出的所有答案都错过了分组格式(8-4-4-4-12)对于在文本中编码GUID不是强制性的.它经常被使用,但显然32个十六进制数字的普通链也是有效的.[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
Run Code Online (Sandbox Code Playgroud)
[1]所述的问题是关于校验荷兰国际集团变量 S,所以我们应该包括用户不友好的形式为好.
Eva*_*rds 10
到目前为止发布的所有特定于类型的正则表达式都失败了"类型0"Nil UUID,在RFC的4.1.7中定义为:
nil UUID是UUID的特殊形式,指定将所有128位设置为零:
00000000-0000-0000-0000-000000000000
修改沃尔夫的答案:
/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-5][0-9a-f]{3}-?[089ab][0-9a-f]{3}-?[0-9a-f]{12}$/i
Run Code Online (Sandbox Code Playgroud)
或者,为了在没有全零的情况下正确排除"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
Run Code Online (Sandbox Code Playgroud)
小智 9
如果您使用uuid包,您可以导入验证并将id传递给它
const { v4: uuidv4, validate } = require('uuid');
const { id } = request.params;
validate(id) ? true : false;
Run Code Online (Sandbox Code Playgroud)
小智 6
如果有人使用yup(JavaScript 模式验证器库),则可以使用以下代码来实现此功能。
const schema = yup.object().shape({
uuid: yup.string().uuid()
});
const isValid = schema.isValidSync({uuid:"string"});
Run Code Online (Sandbox Code Playgroud)
上述答案的稍微修改版本以更简洁的方式编写。这将验证带有连字符的任何 GUID(但是可以轻松修改以使连字符可选)。这也将支持大写和小写字符,这已成为无论规范如何的约定:
/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i
Run Code Online (Sandbox Code Playgroud)
这里的关键是下面重复的部分
(([0-9a-fA-F]{4}\-){3})
Run Code Online (Sandbox Code Playgroud)
简单地重复 4 个字符模式 3 次