在JavaScript中验证GUID

时间:2014-07-04 11:20:21

标签: javascript regex

我尝试构建一个正则表达式,检查一个值是否为RFC4122有效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。

我做错了什么?

2 个答案:

答案 0 :(得分:8)

当您使用/构建正则表达式时,不得在正则表达式中包含new 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 - 你可以说:

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;

答案 1 :(得分:2)

如果您正在使用RegExp对象,则无法将修饰符添加为/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