用于确保域名的正则表达式仅为英文字符

时间:2012-11-26 23:16:30

标签: c# asp.net .net regex string

匹配必须包含以下内容的域名有什么好的,清晰的正则表达式:

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

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


要回答这个问题,我所寻找的是这样的(测试和工作)。对不起原来的问题没有明确说明我想要做什么,但是我已经提出了帮助我为社区提供这个答案的建议:

^ [\ w-。] * $

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

2 个答案:

答案 0 :(得分:3)

你可以使用这个:

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

其中\p{Z}是"所有分隔符" class和i ignore-case选项。

答案 1 :(得分: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\]\[!"#$%&'()*+,./:;<=>?@\^_`{|}~-]+$

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