2

ユーザー名の長さは 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

3 に答える 3

5

{4,32}内側のパランセシスマッチを4回繰り返します。あなたはそれを満たすために少なくとも4文字が必要です。

長さをアサートするには、文字クラス指定子から独立した先読みアサーションが必要です。

 preg_match('/^(?=.{4,32})([a-z]+[a-z0-9_]*)$/i'

                   |             |
             asserts length      |
                            checks char mix
于 2012-10-29T10:43:05.880 に答える
3

あなたはあなたの繰り返しを4から32回繰り返しています。ユーザー名が文字で始まることを確認したいと思います。この場合、これはおそらくあなたが探しているものです:

preg_match('/^[a-z]\w{3,31}$/i', $input);

\wと同等であることに注意してください[a-zA-Z0-9_]

于 2012-10-29T10:42:42.687 に答える
2

正規表現が間違っています。ここ

  • ([a-z]+[a-z0-9_]*)一致しh_q8Yます。
  • 次に、の少なくとも4つまたは最大で32{4,32}存在することを意味します。ただし、提供したのは1つだけです。h_q8Yh_q8Y

したがって、それは機能していません。

次の式を使用する方がよいでしょう。

/^[a-z]\w{3,31}$/i
于 2012-10-29T10:43:01.933 に答える