0

登録のために、正規表現でユーザー名を確認します-ユーザー名には3文字以上20文字未満が含まれている必要があります。また、ユーザー名には、1文字と「_」、「。」、「-」のみを含めることができます。

/^([\w\.\-]{3,20})$/isu.

今私もチェックしたい(p-)、これが存在する場合はfalseを返しますユーザー名カントコンテンツ(p-)

private $regExpUsername = "/^([\w\.\-]{3,20})$/isu";

    private function checkUsername($username){
        if(!preg_match($this->regExpUsername, $username)){
            $this->addError(ERR_ENTER_USERNAME);
        }
    }
4

1 に答える 1

3

ユーザー名を。で終わらせたくないことを理解しました-。これはこれだろう

^[\w.-]{2,19}[\w.]$

アンダースコアが含まれているため\w、ダッシュは最後の文字を定義する文字クラスの一部ではないため、ユーザー名はアンダースコアで終了できますが、ダッシュは使用できません。

ここRegexrでそれを参照してください

zerkmsがコメントしたように、s修飾子は、使用しない特殊文字の動作を変更するため、ここでは意味が.ありません。

また、i修飾子は意味がありません。小文字と大文字に一致しますが、表現を定義するために文字を使用することはありません。

アップデート

次に、ネガティブな先読みが必要です

^(?!.*p-)[\w.-]{3,20}$

(?!.*p-)p-は否定的な先読みであり、文字列のどこかにあるとすぐにこのアサーションは失敗します。

ここRegexrでそれを参照してください

于 2012-07-02T09:55:26.907 に答える