PHP正则表达式构建:含指定字符范围且排除特定字符
正则表达式整合解决方案
针对你需要的三个检测要求,正确的整合正则表达式如下:
preg_match("/^(?=.*[\/.@])[^=*_xyz]{10,}$/", $string);
正则规则拆解
^和$:锚定字符串的开头和结尾,确保正则匹配整个字符串,而非部分内容(?=.*[\/.@]):正向肯定预查,强制要求字符串中至少包含/、.、@中的任意一个(.*用来匹配符号前的任意字符,保证符号可以出现在字符串任意位置)[^=*_xyz]{10,}:匹配10个及以上的合法字符,[^=*_xyz]表示排除=、*、_、x、y、z这些禁用字符,{10,}保证长度至少为10
测试验证
符合要求(返回1)
$string1 = "Mega/lodon";:长度达标,包含/,无禁用字符$string2 = "Megalo.don";:长度达标,包含.,无禁用字符$string3 = "Me@galo/doing";:长度达标,包含@和/,无禁用字符
不符合要求(返回0)
$string4 = "Meg@loz=on";:包含禁用字符z和=$string5 = "Meglo*don";:包含禁用字符*$string6 = "Megzlodonx";:包含禁用字符z和x$string7 = "=egalodoing";:包含禁用字符=
你之前尝试的问题
你的正则 /[a-zA-Z]{10,}.[\/.@]?.[^=*xyz]/ 存在几个问题:
- 没有锚定开头结尾,可能只匹配字符串的一部分,而非整个内容
- 用
.[\/.@]?.的写法无法确保必须包含指定符号,?表示可选,会漏掉必须包含的要求 - 没有覆盖所有禁用字符(漏掉了
_),且字符类的组合逻辑混乱,无法正确限制整个字符串的字符范围
内容的提问来源于stack exchange,提问作者Ricardo Castañeda
相关产品推荐
相关产品推荐

