如何修改preg_match规则,让用户名仅允许单引号而非反斜杠
解决正则允许单引号但禁止反斜杠的问题
原正则里的字符组部分[0-9A-Za-z!@#$%^&_ -\\'],因为PHP双引号字符串会把\\解析成单个反斜杠,所以字符组里实际包含了反斜杠、连字符和单引号,这就是为啥会允许反斜杠的原因。
要只保留单引号、去掉反斜杠的话,直接把字符组里的\\删掉就行,单引号在双引号字符串里不需要额外转义。修改后的代码:
preg_match("/^(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z])[0-9A-Za-z!@#$%^&_ -']{3,48}$/", $hostname)
补充说明:字符组里的-放在_和'之间不会被解析为范围符(二者ASCII码无连续范围),所以不用转义也能正常生效。
内容的提问来源于stack exchange,提问作者Doogie
相关产品推荐
相关产品推荐

