如何检查变量是否包含有效的UUID/GUID标识符?
我目前只对验证类型1和4感兴趣,但这不应该成为您回答的限制。
如何检查变量是否包含有效的UUID/GUID标识符?
我目前只对验证类型1和4感兴趣,但这不应该成为您回答的限制。
当前回答
我有这个函数,但本质上它和公认的答案是一样的。
export default function isUuid(uuid: string, isNullable: boolean = false): boolean {
return isNullable
? /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(uuid)
: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(uuid);
}
其他回答
使用.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}$");
}
在Node中实现它的一个好方法是使用ajv包(https://github.com/epoberezkin/ajv)。
const Ajv = require('ajv');
const ajv = new Ajv({ allErrors: true, useDefaults: true, verbose: true });
const uuidSchema = { type: 'string', format: 'uuid' };
ajv.validate(uuidSchema, 'bogus'); // returns false
ajv.validate(uuidSchema, 'd42a8273-a4fe-4eb2-b4ee-c1fc57eb9865'); // returns true with v4 GUID
ajv.validate(uuidSchema, '892717ce-3bd8-11ea-b77f-2e728ce88125'); // returns true with a v1 GUID
如果有人使用yup, JavaScript模式验证器库,此功能可以通过以下代码实现。
const schema = yup.object().shape({
uuid: yup.string().uuid()
});
const isValid = schema.isValidSync({uuid:"string"});
如果您想检查或验证特定的UUID版本,下面是相应的正则表达式。
注意,唯一的区别是版本号,这将在4.1.3中解释。UUID 4122 RFC的版本章节。
版本号是第三组的第一个字符:[VERSION_NUMBER][0-9A-F]{3}:
UUID v1: / ^ [0-9A-F] {8} - {4} [0-9A-F] [1] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我 UUID v2: / ^ [0-9A-F] {8} - {4} [0-9A-F] [2] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我 UUID v3: / ^ [0-9A-F] {8} - {4} [0-9A-F] [3] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我 UUID v4: / ^ [0-9A-F] {8} - {4} [0-9A-F] [4] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我 UUID v5: / ^ [0-9A-F] {8} - {4} [0-9A-F] [5] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我
我向Apache Commons validator添加了一个UUID验证器。它还没有合并,但你可以在这里投票:
https://github.com/apache/commons-validator/pull/68