使用Javascript进行域验证的Regex

Regex for domain verification with Javascript

本文关键字:验证 Regex Javascript 使用      更新时间:2024-05-31

我想创建一个正则表达式来验证域名。

我在StackOverflow上搜索了很多,找到了这个解决方案,它忽略了http和文件夹,只检查域。

报价

var pattern = new RegExp('^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:'.[a-zA-Z]{2,})+$', 'i');

但由于我不是巫师,而且我很久以前就放弃了理解Regex,所以我把它放在Regex101上,这表明'localhost'不匹配。问题是当我执行以下代码时(这里是jsFiddle):

var origin = 'localhost';
var pattern = new RegExp('^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:'.[a-zA-Z]{2,})+$', 'i');
console.log(origin, pattern.test(origin));

它返回true(不应匹配localhost)。为什么?


编辑:出于某种原因,人们认为我希望localhost被识别为一个域但恰恰相反如果你读了这个问题,你会发现它返回了true,尽管它应该返回false。

在Regex101中,您输入的是一个文本regex,而不是字符串。由于您的正则表达式是正确的,所以localhost不匹配。然而,在您的代码中,您使用字符串创建正则表达式(这是个坏主意),这意味着您必须转义每个反斜杠。

您可以使用Regexp文字来防止这个问题,这里有一个jsFiddle。

只需使用带有正斜杠的原始正则表达式,即

var pattern = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:'.[a-zA-Z]{2,})+$/i;

或者只是转义反斜杠:http://jsfiddle.net/theonlygusti/o6yL2w1f/2/

var pattern = new RegExp('^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:''.[a-zA-Z]{2,})+$', 'i');