我有下面的正则表达式,我将其解释为一个模式,它将匹配由字母数字字符和连字符组成的字符串。
if (preg_match('/[A-Za-z0-9-]/', $subdomain) === false) {
// valid subdomain
}问题是,这个regex也匹配空格,这在子域名中显然是不可取的。
对于积分,这是一种合适的方式来验证子域名?我不知道哪些特殊的字符是允许的,但我认为我只允许连字符来保持简单。还有什么需要我查的吗?例如最大长度?
发布于 2017-03-02 15:05:07
您的模式与字符串中任何位置的ASCII字母、数字或-匹配,如果找到,则返回true。如果您将$#$%$&^$g传递给它,它将返回true。
匹配由字母数字字符和连字符组成的字符串的模式是
if (preg_match('/^[A-Za-z0-9-]+$/D', $subdomain)) {
// valid subdomain
}详细信息
^ -字符串的开始[A-Za-z0-9-]+ -1或更多字符,它们要么是ASCII字母、数字,要么是-。$ -字符串的结尾/D -一个PCRE_DOLLAR_ENDONLY修饰符,它使$锚点在字符串的最末端匹配(不包括字符串中最后换行符之前的位置)。https://stackoverflow.com/questions/42558881
复制相似问题