使用Javascript进行域验证的正则表达式

时间:2015-02-26 18:06:19

标签: javascript regex string

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

我在StackOverflow上搜索了很多,我找到了this solution,它忽略了http和文件夹,只检查了域名。

QUOTE

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

但是因为我不是巫师而且我很久以前就试图理解正则表达式,I placed it on Regex101向我展示了' localhost '并不匹配。问题是当我执行以下代码(jsFiddle here)时:

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。

1 个答案:

答案 0 :(得分:3)

在Regex101中,您输入的是字面正则表达式,而不是字符串。由于你的正则表达式是正确的(它是)localhost不匹配。但是,在您的代码中,您使用字符串创建正则表达式(不好主意),这意味着您必须转义每个反斜杠。

您可以使用正则表达式文字here's a 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');