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

时间:2017-03-02 15:03:24

标签: php regex subdomain

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

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

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

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

1 个答案:

答案 0 :(得分:4)

您的模式匹配ASCII字母或数字或字符串内的<a href="#" data-tag="<?php echo implode(',', $project->tags()) ?>">Project</a> 任何地方,如果找到,则返回true。例如,如果你将-传递给它,它将返回true。

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

$#$%$&^$g

<强>详情:

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