PHP 匹配字母数字和连字符(不是空格)的正则表达式以用作子域

PHP regex to match alphanumeric and hyphens (not spaces) for use as subdomain

我有以下正则表达式,我将其解释为匹配仅由字母数字字符和连字符组成的字符串的模式。

if (preg_match('/[A-Za-z0-9-]/', $subdomain) === false) {
    // valid subdomain
}

问题是这个正则表达式也匹配空格,这在子域名中显然是不可取的。

对于奖励积分,这是验证子域名的合适方法吗?我不确定允许哪些特殊字符,但我想我会通过只允许连字符来保持简单。还有什么我需要检查的吗?例如最大长度?

您的模式与字符串中的 ASCII 字母或数字或 - 任意位置 相匹配,如果找到,则 return 为真。例如,如果您将 $#$%$&^$g 传递给它,它将 return 为真。

匹配仅由字母数字字符和连字符组成的字符串的模式是

if (preg_match('/^[A-Za-z0-9-]+$/D', $subdomain)) {
    // valid subdomain
}

详情:

  • ^ - 字符串开头
  • [A-Za-z0-9-]+ - 1 个或多个 ASCII 字母、数字或 -
  • 字符
  • $ - 字符串结尾
  • /D - PCRE_DOLLAR_ENDONLY 修饰符,使 $ 锚匹配在字符串的最后(不包括字符串中最后一个换行符之前的位置)。