我想创建一个正则表达式来验证域名。
我在 StackOverflow 上搜索了很多,发现 this solution ,它会忽略 http 和文件夹并仅检查域。
引用
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。
最佳答案
在 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');
关于javascript - 使用 Javascript 进行域验证的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28749656/