我有以下正则表达式,我将其解释为将匹配仅由字母数字字符和连字符组成的字符串的模式。
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/