【问题标题】:Regexp for validating .au domain names用于验证 .au 域名的正则表达式
【发布时间】:2009-08-05 22:49:29
【问题描述】:

我需要一个快速的正则表达式来验证字符串是否为有效的 .au 域名。例如:

xxx.com.au
xxx.net.au
xxx.org.au
xxx.biz.au
xxx.--.au

所有这些都应该被认为是有效的。

对于不像我这样对正则表达式绝望的人来说,这应该很简单。有什么想法吗?

【问题讨论】:

    标签: php regex string


    【解决方案1】:

    如果您只想在 .au 空间中允许某些二级 TLD:

    /^[a-zA-Z0-9-]+\.(?:com|net|org|biz)\.au$/
    

    根据需要修改由 | 分隔的辅助列表。

    如果您不介意严格验证二级 TLD:

    ^[a-zA-Z0-9-]+\.\a+\.au$
    

    如果您想允许更多子域(即 xxxx.yyyy.com.au):

    ^(?:[a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.\a+\.au$
    

    如果您使用的特定正则表达式引擎不支持后者,您可能需要使用 a-zA-Z 而不是 \a

    【讨论】:

    • 这在他的最后一个例子中失败了。
    • 如答案中所述,应编辑辅助列表以反映希望接受的任何值。
    • 您好,能否请您更新一下以不允许子域?我只想允许主域名,因为这是一个域名注册网站
    • 我也在用PHP,不知道是否支持\a?
    • 更新为没有子域(所有必要的只是从括号中删除句点)。我不相信 PHP 支持 \a,所以我将其编辑为使用 a-zA-Z。
    【解决方案2】:
    ^[\w\d-\.]+\.au$
    

    这应该可以正常工作。因为 .au 之前的内容可能会在 the ones that already exist 之上添加其他二级域,所以您真的无能为力。

    【讨论】:

    • 为什么是 \s?最后我检查了域中没有空格。
    • 另外,\w 允许使用下划线,这在域中无效。如果使用 \w,则 \d 将是多余的,因为 \w 包含数字。
    • \s 是我的错字,仅在页面上显示了大约 15 秒。让任何人都感到惊讶。
    • 我猜想的时间很奇怪。 :) 但你真的想要 \a 而不是 \w。
    • 您使用的是什么正则表达式引擎?我的(Python 的 re 模块)不允许 \a.
    【解决方案3】:
    (.*)\.([com|net|org|biz])\.au
    

    【讨论】:

      【解决方案4】:
      /^(?:[a-z0-9\-]+\.){2,}au$/i
      

      用于preg_match() 或其他 PCRE 函数:

      if(preg_match('/^(?:[a-z0-9\-]+\.){2,}au$/i', $domain))
          echo "'$domain' is a valid domain\n";
      else
          echo "'$domain' is invalid\n";
      

      【讨论】:

      • {2,} 部分有什么作用?我不希望对 tld 的字符数有任何限制
      • {2,} 表示 (?:[a-z0-9\-]+\.) 需要在末尾的“au”之前出现至少两次 .