正则表达式帮助:子域检查

时间:2010-12-29 06:27:33

标签: php regex validation url

嘿,我有一个表单,其中的人进入子域名,如value.google.com,条目将是“有效”

我想运行一个正则表达式检查(我在正则表达式中非常可怕)执行以下操作:

第一个字符:不能是符号 中间字符:a-z,A-Z和符号 - 和。只要 最后一个字符:不能是符号

如果测试失败,我希望它吐出错误。

任何人都可以帮我解决这个问题吗?谢谢!

你们认为应该在那里有任何其他限制吗?

3 个答案:

答案 0 :(得分:1)

你需要的是一个角色类。 :)

  • [a-zA-Z \ - \。]将匹配“a-zA-Z - ”类型的字符。
  • [a-zA-Z]将匹配“a-zA-Z”类型的字符。
  • ^表示行的开头
  • $表示行尾
  • +表示“一次或多次”

所以你要找的是: 的 ^ [A-ZA-Z] [A-ZA-Z \ - \] + [A-ZA-Z] $

因为你在PHP中可以设置i-flag,所以它变得不区分大小写并且这段代码应该可以工作:


  if (preg_match("/^[a-z][a-z\-\.]+[a-z]$/i", "valid.google.com")) {
   echo "A match was found.";
  } else {
   echo "A match was not found.";
  }

提示:你还不应该包括数字吗? [A-Z0-9]

答案 1 :(得分:0)

如果TLD始终为com,您应该能够:

/^(.*)\.[^.]+\.com$/

这将匹配最右边的.字符之前的任何内容(.com除外)。

但是,您可能希望使用简单的字符串操作(strrpos())来执行此操作。或者,你可以分开.

function extract_sub($domain) {
        $parts = explode('.', $domain);

        return implode('.', array_slice($parts, 0, -2));
}

Demo

答案 2 :(得分:0)

我认为这可能是最常见的情况。

$subdomain = "usersubdomain";

if(preg_match("/^[A-Z0-9]+$/i", $subdomain)) {
   echo "Valid sub domain";
  }else{
   echo "Not a valid sub domain.";
  }