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

标签 php regex subdomain

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

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

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

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

最佳答案

您的模式匹配字符串中的 ASCII 字母或数字或 - anywhere,如果找到,则返回 true。例如,如果您将 $#$%$&^$g 传递给它,它将返回 true。

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

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

详情:

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

关于PHP 正则表达式匹配字母数字和连字符(不是空格)以用作子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42558881/

相关文章:

scala - Play 2.0 中的子域

apache - Ubuntu - 使用不同的证书保护 *.mydomain.com 和 *.sub.mydomain.com 时遇到问题

php - 我无法在实时服务器上使用curl方法运行api

php - 为什么我们在 php 中使用 mysqli_poll() 函数?

php - 根据 URL 字符串隐藏内容 (PHP)

regex - 电影抓取器,正则表达式并没有抓取每部电影

PHP 无法正确解析 CSV(文件为 UTF-16LE)

mysql - 提取存储在 MySQL 字段中的第三级文件夹结构

正则表达式排除查找工具的单词

heroku - 如何将自定义域指向 Heroku 子域?