Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证JavaScript中的GUID_Javascript_Regex - Fatal编程技术网

验证JavaScript中的GUID

验证JavaScript中的GUID,javascript,regex,Javascript,Regex,我正在尝试构建一个正则表达式来检查一个值是否是有效的GUID。为了做到这一点,我使用了以下方法: var id = '1e601ec7-fb00-4deb-a8bb-d9da5147d878'; var pattern = new RegExp('/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i'); if (pattern.test(id) === true) { console.log

我正在尝试构建一个正则表达式来检查一个值是否是有效的GUID。为了做到这一点,我使用了以下方法:

var id = '1e601ec7-fb00-4deb-a8bb-d9da5147d878';
var pattern = new RegExp('/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i');
if (pattern.test(id) === true) {
  console.log('We have a winner!');
} else {
  console.log('This is not a valid GUID.');
}
我确信我的GUID是有效的GUID。我想我找到了正确的GUID正则表达式。然而,无论发生什么,我总是得到一个错误,说它不是一个GUID


我做错了什么?

在使用
新RegExp
构造正则表达式时,不能将
/
字符包含在正则表达式中,并且应该将类似
I
的修饰符作为第二个参数传递给构造函数:

var pattern = new RegExp('^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', 'i');
new RegExp('^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', 'i');
但是在这种情况下,没有必要使用
newregexp
——您可以说:

var pattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;

如果使用的是
RegExp
对象,则不能将修饰符添加为
/i
。必须将它们作为第二个参数传递给构造函数:

var pattern = new RegExp('^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', 'i');
new RegExp('^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', 'i');
或者使用文字语法:

/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i

这不是完全有效的,请尝试以下操作:d1f9c98a-48b8-454e-68a2-08D76F610DAC这不是有效的guid,因此答案正确。lt,为什么不?长度正确,请解释。您的示例无效,因为它的“变量”字段值无效。“变体”由数字17(第四组的第一个字符)的前两位或三位表示。版本4 UUID必须具有“10”(变体1)或“110”(变体2)作为由十六进制数字指示的半字节(半字节)的最高有效位。这基本上意味着,对于变量1,该十六进制数字的值为8(1000)、9(1001)、a(1010)、b(1011),对于var2 UUID,该值为c(1100)或d(1101)。您的示例UUID在这个位置有“6”,这不是这个数字的有效值;只有Var1是常用的,因为var2是字节顺序不一致的遗留古怪,是为Microsoft COM保留的,因此不是也不应该常用。变体2 UUID也只有“随机性”的一半,这是因为变体编号会丢失一个额外的位(3位而不是2位)。所以忽略它们——使用上面的正则表达式:)