我尝试构建一个正则表达式,检查一个值是否为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。
我做错了什么?
答案 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