0

什么是一个好的、清晰的正则表达式来匹配一个必须包含的域名:

  • 只有英文字母字符,加上数字
  • 包括在域名中有效且可靠处理的空格或其他分隔符

澄清一下,这是为了验证域名。虽然互联网社区有支持域名国际化的举措,但我对此进行了相当多的研究并保持我的解释相当简单,只有包含现代英国英语字符集的字符的域名(包括数字)由域名系统 (DNS) 可靠地处理。我并不是要禁止国际化——我在职业生涯中做了很多相反的工作!


为了回答这个问题,我一直在寻找类似这样的东西(经过测试并且有效)。抱歉,最初的问题对我试图做的事情不够明确,但是我赞成帮助我向社区提供这个答案的建议:

^[\w- .]*$

  • '\w' = [a-zA-Z0-9_] 的简写
  • '- ' = 允许 '-', ' ', '.'
  • 星号 = 前面的任何字符零次或多次
4

2 回答 2

3

你可以使用这个:

(?i)[a-z0-9\p{Z}]

\p{Z}“所有分隔符”类和i忽略大小写选项在哪里。

于 2012-11-26T23:31:22.460 回答
2

您可以[a-zA-Z\d\s\p{P}]+用作最简单的解决方案。或者使用非 unicode 解决方案 >>

POSIX 定义了字符类[:...:],但不是每个正则表达式引擎都支持它们。
但是可以使用替代集......

[:alnum:]   [A-Za-z0-9]                            Alphanumeric characters
[:space:]   [ \t\r\n\v\f]                          Whitespace   characters
[:punct:]   [\]\[!"#$%&'()*+,./:;<=>?@\^_`{|}~-]   Punctuation  characters

所以把它们放在一起你会得到

^[A-Za-z0-9 \t\r\n\v\f\]\[!"#$%&'()*+,./:;<=>?@\^_`{|}~-]+$

通过这种方式,您可以看到要匹配的内容和不匹配的内容。请注意,某些字符被转义\为不转义,它们将具有不同的含义。

于 2012-11-26T23:49:55.220 回答