我希望用户名长度为 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
我希望用户名长度为 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
{4,32}
重复内括号匹配 4 次。您至少需要 4 个字母才能满足它。
要断言长度,您需要一个独立于字符类说明符的前瞻断言:
preg_match('/^(?=.{4,32})([a-z]+[a-z0-9_]*)$/i'
| |
asserts length |
checks char mix
你重复你的重复 4 到 32 次。我假设您想确保用户名以字母开头。在这种情况下,这可能是您正在寻找的:
preg_match('/^[a-z]\w{3,31}$/i', $input);
注意\w
相当于[a-zA-Z0-9_]
。
你的正则表达式是错误的。这里
([a-z]+[a-z0-9_]*)
匹配h_q8Y
。{4,32}
意味着将有至少 4 个或最多 32个h_q8Y
. 但是你只提供了一个h_q8Y
。因此它不起作用。
最好使用以下表达式。
/^[a-z]\w{3,31}$/i