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 修饰符,使 $
锚匹配在字符串的最后(不包括字符串中最后一个换行符之前的位置)。
我有以下正则表达式,我将其解释为匹配仅由字母数字字符和连字符组成的字符串的模式。
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 修饰符,使$
锚匹配在字符串的最后(不包括字符串中最后一个换行符之前的位置)。