如何检查变量是否包含有效的UUID/GUID标识符?
我目前只对验证类型1和4感兴趣,但这不应该成为您回答的限制。
如何检查变量是否包含有效的UUID/GUID标识符?
我目前只对验证类型1和4感兴趣,但这不应该成为您回答的限制。
当前回答
以上答案稍作修改,以更简洁的方式书写。这将验证任何带有连字符的GUID(但是很容易修改为可选的连字符)。这也将支持大写和小写字符,这已经成为惯例,无论规范:
/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i
这里的关键是下面的重复部分
(([0-9a-fA-F]{4}\-){3})
它只是简单地重复4字符模式3次
其他回答
版本1到5,当version被省略时不使用多版本正则表达式。
const uuid_patterns = { 1: /^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i, 2: /^[0-9A-F]{8}-[0-9A-F]{4}-2[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i, 3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i, 4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, 5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i }; const isUUID = (input, version) => { if(typeof input === "string"){ if(Object.keys(uuid_patterns).includes(typeof version === "string" ? version : String(version))){ return uuid_patterns[version].test(input); } else { return Object.values(uuid_patterns).some(pattern => pattern.test(input)); } } return false; } // Testing let valid = [ 'A987FBC9-4BED-3078-CF07-9141BA07C9F3', 'A987FBC9-4BED-4078-8F07-9141BA07C9F3', 'A987FBC9-4BED-5078-AF07-9141BA07C9F3', ]; let invalid = [ '', 'xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3', 'A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx', 'A987FBC94BED3078CF079141BA07C9F3', '934859', '987FBC9-4BED-3078-CF07A-9141BA07C9F3', 'AAAAAAAA-1111-1111-AAAG-111111111111', ]; valid.forEach(test => console.log("Valid case, result: "+isUUID(test))); invalid.forEach(test => console.log("Invalid case, result: "+isUUID(test)));
正则表达式来拯救
/^[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}\}?$/
如果使用uuid包,可以导入验证并将id传递给它
const { v4: uuidv4, validate } = require('uuid');
const { id } = request.params;
validate(id) ? true : false;
我向Apache Commons validator添加了一个UUID验证器。它还没有合并,但你可以在这里投票:
https://github.com/apache/commons-validator/pull/68
以上答案稍作修改,以更简洁的方式书写。这将验证任何带有连字符的GUID(但是很容易修改为可选的连字符)。这也将支持大写和小写字符,这已经成为惯例,无论规范:
/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i
这里的关键是下面的重复部分
(([0-9a-fA-F]{4}\-){3})
它只是简单地重复4字符模式3次