0

我正在尝试使用正则表达式(来自 Javascript)来验证域名列表。例如,如果用户输入:

facebook.com
stackoverflow.com
apple.com

...正则表达式应该验证OK。然而,

facebook.com
clearlynotadomainname
apple.com

...应该验证失败。

我正在使用这个正则表达式:

^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$

这适用于第一行文本,但一旦用户输入第一个 CR/LF,表达式就会失败。是否可以让正则表达式遍历或解析字符串中的所有行?

4

2 回答 2

2

为什么不简单地在换行符上拆分字符串?假设您想忽略空行:

function testString(str) {
  var regex = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}(\n|$)/
  var split = str.split('\n')

  for(var i = 0; i < split.length; ++i) {
    if(split[i] != ''&& !regex.test(split[i]))
      return false
  }

  return true
}

testString('facebook.com\nstackoverflow.com\napple.com')
=> true
testString('facebook.com\nclearlynotadomainname\napple.com')
=> false
于 2012-11-19T11:42:36.190 回答
0

要验证 [,;] 域(仅),您可以使用:

^\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+)\s*(?:[;,]\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+)\s*)*$

在不同的情况下进行了测试。

于 2019-10-22T12:41:24.947 回答