使用Javascript进行域验证的正则表达式
我想创建一个正则表达式来验证域名 我在StackOverflow上搜索了很多,发现它忽略了http和文件夹,只检查域 引用 但由于我不是一个向导,而且我很久以前就放弃了理解Regex,这表明“localhost”并不匹配。问题是当我执行以下代码()时: 它返回true(不应匹配localhost)。为什么?使用Javascript进行域验证的正则表达式,javascript,regex,string,Javascript,Regex,String,我想创建一个正则表达式来验证域名 我在StackOverflow上搜索了很多,发现它忽略了http和文件夹,只检查域 引用 但由于我不是一个向导,而且我很久以前就放弃了理解Regex,这表明“localhost”并不匹配。问题是当我执行以下代码()时: 它返回true(不应匹配localhost)。为什么? 编辑:出于某种原因,人们认为我希望localhost被识别为域但恰恰相反如果你阅读了这个问题,你会发现它返回的是true,尽管它应该返回false。在你的Regex101中,你输入的是一个
编辑:出于某种原因,人们认为我希望localhost被识别为域但恰恰相反如果你阅读了这个问题,你会发现它返回的是true,尽管它应该返回false。在你的Regex101中,你输入的是一个文本regex,而不是一个字符串。因为您的正则表达式是正确的,所以localhost不匹配。然而,在代码中,您使用字符串创建正则表达式(坏主意),这意味着您必须转义每个反斜杠 您可以使用Regexp文本来防止该问题 只需使用带有正斜杠的原始正则表达式,即
var pattern = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/i;
或者只是避开反斜杠:
在Regex101中,输入的是文本regex,而不是字符串。因为您的正则表达式是正确的,所以localhost不匹配。然而,在代码中,您使用字符串创建正则表达式(坏主意),这意味着您必须转义每个反斜杠 您可以使用Regexp文本来防止该问题 只需使用带有正斜杠的原始正则表达式,即
var pattern = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/i;
或者只是避开反斜杠:
在Regex101中,输入的是文本regex,而不是字符串。因为您的正则表达式是正确的,所以localhost不匹配。然而,在代码中,您使用字符串创建正则表达式(坏主意),这意味着您必须转义每个反斜杠 您可以使用Regexp文本来防止该问题 只需使用带有正斜杠的原始正则表达式,即
var pattern = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/i;
或者只是避开反斜杠:
在Regex101中,输入的是文本regex,而不是字符串。因为您的正则表达式是正确的,所以localhost不匹配。然而,在代码中,您使用字符串创建正则表达式(坏主意),这意味着您必须转义每个反斜杠 您可以使用Regexp文本来防止该问题 只需使用带有正斜杠的原始正则表达式,即
var pattern = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/i;
或者只是避开反斜杠:
首先,如果使用字符串定义正则表达式,则需要转义该反斜杠@T.J.Crowder我认为反斜杠是在逃避圆点……更重要的是:这个正则表达式除了英文字母表中的字母A-Z之外,完全无法处理任何其他内容。我们现在有了更具表现力的TLD。我想除了我至少有一个字符、一个点和至少一个字符之外,我不会尝试验证任何东西。当然,对于
localhost
来说,这也会失败,因为localhost
不是域名。@theonlygusti:在正则表达式中也可以。在字符串文本中,\.
是
(因为反斜杠是字符串文本中的一个转义,它转义了点,不需要转义,最终完成了一件事;正则表达式引擎永远看不到该反斜杠)。首先,如果使用字符串定义正则表达式,则需要转义该反斜杠。请尝试:模式=/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/;
@T.J.Crowder我以为反斜杠是在逃避圆点…更重要的是:这个正则表达式除了英文字母表中的字母A-Z之外,完全无法处理任何其他字符。我们现在有了更具表现力的TLD。我想除了我至少有一个字符、一个圆点和至少一个字符之外,我不会尝试验证任何其他内容。当然,这对于localhost
也会失败,因为localhost
不是域名。@theonlygusti:在正则表达式文本中可以。在字符串文本中,\。
是
(因为反斜杠是字符串文字中的转义符,它会转义点,而点不需要转义,最终会执行操作;正则表达式引擎永远看不到该反斜杠)。首先,如果使用字符串定义正则表达式,则需要转义该反斜杠。请尝试:pattern=/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\[a-zA-Z]{2,})+$/;
@T.J.Crowder我以为反斜杠是在逃避圆点…更重要的是:这个正则表达式除了英文字母表中的字母A-Z之外,完全无法处理任何其他字符。我们现在有了更具表现力的TLD。我想除了我至少有一个字符、一个圆点和至少一个字符之外,我不会尝试验证任何其他内容。当然,这对于localhost
也会失败,因为localhost
不是域名。@theonlygusti:在正则表达式文本中可以。在字符串文本中,\。
是
(因为反斜杠是字符串文字中的转义符,它会转义点,而点不需要转义,最终会执行操作;正则表达式引擎永远看不到该反斜杠)。首先,如果使用字符串定义正则表达式,则需要转义该反斜杠。请尝试:pattern=/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\[a-zA-Z]{2,})+$/;
@T.J.Crowder我以为反斜杠是在逃避圆点…更重要的是:这个正则表达式除了英文字母表中的字母A-Z之外,完全无法处理任何其他字符。我们现在有了更具表现力的TLD。我想除了我至少有一个字符、一个圆点和至少一个字符之外,我不会尝试验证任何其他内容。当然,这对于localhost
也会失败,因为localhost
不是域名。@theonlygusti:在regex文本中可以。在字符串文本中,\。
是
(因为反斜杠是所使用的字符串文本中的转义符)