Php 可靠的昵称regexp
我想要一个正则表达式来验证昵称:6到36个字符,它应该至少包含一个字母。其他允许的字符:0-9和下划线 这就是我现在拥有的:Php 可靠的昵称regexp,php,regex,Php,Regex,我想要一个正则表达式来验证昵称:6到36个字符,它应该至少包含一个字母。其他允许的字符:0-9和下划线 这就是我现在拥有的: if(!preg_match('/^.*(?=\d{0,})(?=[a-zA-Z]{1,})(?=[a-zA-Z0-9_]{6,36}).*$/i', $value)){ echo 'bad'; } else{ echo 'good'; } 这似乎是可行的,但当验证此字符串时,例如: 11111 A>无效,但应为 啊啊!aaaa>是有效的,但不应该 有什么办法让这个
if(!preg_match('/^.*(?=\d{0,})(?=[a-zA-Z]{1,})(?=[a-zA-Z0-9_]{6,36}).*$/i', $value)){
echo 'bad';
}
else{
echo 'good';
}
这似乎是可行的,但当验证此字符串时,例如:
11111 A>无效,但应为
啊啊!aaaa>是有效的,但不应该
有什么办法让这个regexp更好吗?我会把你的任务分成两个regex:
/^\w{6,36}$/i
/[a-z]/i
'/^(?=.*[a-z])\w{6,36}$/i'
以下是原始正则表达式的一些问题:
/^.*(?=\d{0,})(?=[a-zA-Z]{1,})(?=[a-zA-Z0-9_]{6,36}).*$/i
:这是干什么用的???这永远是真的,没有任何作用李>(?=\d{0,})
:您不需要(?=[a-zA-Z]{1,})
部分,只需找到一个字母,{1,}
标志也允许您省略i
a-Z
:您在环视之外匹配这些;应该在里面/^.*
:这意味着只要有6-36个(?=[a-zA-Z0-9{6,36})。*$
字符,其余字符串中的所有字符都匹配!该字符串可以是100个字符长,大部分包含非法字符,它仍然会匹配李>\w
if( preg_match('/^[a-z0-9_]{6,36}$/i',$input) && preg_match('/[a-z]/i',$input)) {
// good
} else {
// bad
}
您可以省略
A-Z
,或i
标志。建议合并。谢谢。有点晚了:这是SilentGhost答案的复制品。