这是用于文本框验证。我需要匹配域名列表
匹配
google.com,msn.com,texas.edu.gov.us
msn.com
NON-MATCHES
google.com,msn.com,
@ msn.com,@ google.com
test@test.com
没有尾随逗号(这就是我被卡住的地方)
这是我到目前为止所用的,但逗号分隔的部分不能正常工作:
^([([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}]+\s*)+,$
答案 0 :(得分:2)
在我看来,你最好首先使用\s*,\s*
这样的正则表达式将字符串拆分,然后单独验证每个域。如果您稍后尝试更改逻辑,尝试将其全部推入单个正则表达式将使您的生活变得艰难。
验证正则表达式的域名应该有效。我不知道您是否故意禁止某些有效域名。更通用的域匹配正则表达式将是:
^[\w-]+(\.[\w-]+)+$
但即便是这个也不允许localhost
,在您的情况下可能允许或不允许[\w-]+
。对于其他方面的规格来说太松了。可选择将[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]?
替换为^\s*([\w-]+(\.[\w-]+)+\s*,\s*)*[\w-]+(\.[\w-]+)+\s*$
以获得更严格和更多混淆 - 尽管仍然不会使仅限数据的记录失效,这些记录根据规范无效。你需要它到底有多精确?
根据我上面的示例正则表达式忽略关于拆分字符串的内容,你可以使用以下怪物来匹配域名列表:
{{1}}
答案 1 :(得分:2)
“有些人在遇到问题时会想”我知道,我会使用正则表达式。“现在他们有两个问题。” - 杰米·扎温斯基
这是一个正如你想要的正则表达式。它将处理以逗号分隔的域列表,确保域名中没有非法字符,并强制执行域名长度(我认为它不是61,但是你有61个,所以我离开了)
^ \ S *(([A-ZA-Z0-9] [A-ZA-Z0-9 - ]。{0,61} [A-ZA-Z0-9]([A-ZA- Z0-9] {2,6-})+)+ \ S *,\ S *)*([A-ZA-Z0-9] [A-ZA-Z0-9 - ] {0,61} [A- ZA-Z0-9]([A-ZA-Z0-9] {2,6-})+)$
*注意[a-zA-Z0-9]用于代替[\ w],因为下划线包含在\ w中但在域名中不允许