说明正则表达式中的字符数

时间:2012-10-29 10:39:00

标签: php regex validation username

我希望用户名长度为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

3 个答案:

答案 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