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

标签 javascript regex string

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

我在 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/

相关文章:

javascript - Nodejs : execute some instructions in an asynchronous way

c - 如何修复 `itoa` 实现,使其不打印反向输出?

python - 使用 mmap 将正则表达式应用于整个文件

java - java中的ruby gsub函数,可能是replaceAll?

ruby-on-rails - 如何进行多行匹配并将它们分配给哈希?

c - 让 printf 语句在 openCL 内核代码中工作

java - 编译时常量在 Switch Case Java 中的使用

javascript - 在 shadow dom 中选择元素

javascript - 如何对变量求和?

javascript - 是否可以返回 0 的小数点后两位的浮点值?