二维码 guid 验证 html,关于javascript:如何测试有效的UUID / GUID?

该博客讨论了如何使用正则表达式检查一个变量是否包含有效的UUID(通用唯一标识符)或GUID(全局唯一标识符)。内容涵盖了不同版本的UUID(1-5),包括规范格式、分组和非分组的表示方式,以及处理nil UUID的情况。还提到了使用特定编程语言(如JavaScript和Java)的库进行验证的建议。
摘要由CSDN通过智能技术生成

如何检查变量是否包含有效的UUID/GUID标识符?

我目前只对验证类型1和4感兴趣,但对您的答案没有限制。

用什么格式????

字符串格式,不是十六进制,不是bin,或者我不知道你要什么

^( 0,1[0-9a-fa-f]8 -[0-9a-fa-f-f]4 4 ;0,1$

如果不能排除包含32个连续十六进制数字链(不分组)的变量,请看我的答案。

目前,uuid是在rfc4122中指定的。

因此要验证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

…确保您有一个规范格式的UUID,它是版本1到5,并且是符合RFC4122的适当变体。

注:括号{和}不规范。它们是一些系统和用途的产物。

容易修改上述regex以满足原始问题的要求。

提示:regex组/捕获

+1提及互联网工程工作组(IETF)

我认为[1-5][0-9a-f]3是错误的。我有一个有效的UUID,在那个部分有"b06a",这对我来说是失败的。

@felipebrahm[1-5]是对的,根据RFC,4位表示版本,只有5个版本。

玩弄实现:jsfiddle.net/mshaffer/6e2ljh97

749D0000-0194-1005-2E05-08D61613BF2F在小提琴中为我失败

雷格克斯去营救

/^[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}??\}?$/

或者如果你有括号:/^ ?[0-9a-fa-f]8-[0-9a-fa-f]4-[0-9a-fa-f]4-[0-9a-fa-f‌&8203;]4-[0-9a-fa-f]12 zwnj;&8203;?$/.test('01234567‌&8203;-9abc-def0-1234-5678‌&8203;9abcdef0');

这不太正确。它忽略了[1-5](版本)启动第三个块,而[89AB](变量)启动第四个块。甘波尔的回答是对的。

更简洁的版本(忽略括号):/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i。

如果您使用node.js进行开发,建议使用名为validator的包。它包括验证不同版本的uuid所需的所有regex,另外,您还可以获得用于验证的各种其他函数。

这是NPM链接:验证器

var a = 'd3aa88e2-c754-41e0-8ba6-4198a34aa0a2'

v.isUUID(a)

true

v.isUUID('abc')

false

v.isNull(a)

false

有意思,但看起来需要连字符?下面是它当前使用的四个regex——/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{‌​12}$/i和/或/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-‌​9A-F]{12}$/i和/或/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-‌​9A-F]{12}$/i和/或/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{1‌​2}$/i。

验证程序只支持UUID v3-5,不支持v1

如果您想检查或验证特定的UUID版本,这里是相应的regex。

Note that the only difference is the version number, which is explained in 4.1.3. Version chapter of UUID 4122 RFC.

版本号是第三组的第一个字符:[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

除了在几乎所有情况下都能完成任务的Gambol的答案外,迄今为止给出的所有答案都遗漏了,分组格式(8-4-4-4-12)不必强制将guid编码为文本。它的使用非常频繁,但显然32个十六进制数字的普通链也可以有效。

/^[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]问题是检查变量,所以我们也应该包括用户不友好的表单。

为什么.NET GUID中有破折号?-堆栈溢出加上接受的答案

测试和验证GUID(guid.us)

guid.toString方法(字符串)(msdn)

这是我的最爱。更好的是{?[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]‌​{3}-?[0-9a-f]{12}}?。

到目前为止发布的所有类型特定的regex在"type 0"nil uuid上都失败,在RFC的4.1.7中定义为:

The nil UUID is special form of UUID that is specified to have all 128 bits set to zero: 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

或者,为了正确地排除没有全部零的"类型0",我们有以下内容(感谢卢克):

/^(?:[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

nil uuid的第一个uuid段应该有8个零,而不是7个。提供的regex没有用7验证它。

您的看起来更好,但允许一些无效的UUID,例如:abcdef00-0000-0000-0000-000000000000将匹配您的regex。此regex将匹配有效的UUID,包括nil:/^(?:[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的小方法。

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}$");

}

未捕获的类型错误:s.matches不是函数

给定的脚本不是javascript,这是OP要求的。

我认为更好的方法是使用静态方法fromstring来避免那些正则表达式。

id = UUID.randomUUID();

UUID uuid = UUID.fromString(id.toString());

Assert.assertEquals(id.toString(), uuid.toString());

另一方面

UUID uuidFalse = UUID.fromString("x");

throws java.lang.illegalargumentException:无效的UUID字符串:x

感谢@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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值