我希望用户名长度为4-32个字符。
function validate_username($input)
{
return (bool) preg_match('/^([a-z]+[a-z0-9_]*){4,32}$/i', $input);
}
我的尝试出了什么问题?
var_dump(validate_username('h_q8Y'));
返回FALSE
但var_dump(validate_username('h_q8Yewre_'));
会返回TRUE
答案 0 :(得分:5)
{4,32}
重复内部的paranthesis匹配4次。你需要至少4个字母来满足它。
要断言长度,您需要一个独立于字符类说明符的超前断言:
preg_match('/^(?=.{4,32})([a-z]+[a-z0-9_]*)$/i'
| |
asserts length |
checks char mix
答案 1 :(得分:3)
你重复4到32次重复。我假设你想确保用户名以字母开头。在这种情况下,这可能是您正在寻找的:
preg_match('/^[a-z]\w{3,31}$/i', $input);
请注意,\w
相当于[a-zA-Z0-9_]
。
答案 2 :(得分:2)
您的正则表达式错误。在这里
([a-z]+[a-z0-9_]*)
匹配h_q8Y
。 {4,32}
表示h_q8Y
至少4 或最多32 。但是你只提供了一个h_q8Y
。 因此它不起作用。
使用以下表达式会更好。
/^[a-z]\w{3,31}$/i