2017-02-27 16 views
1

私は現在、サインアップフォームの提出時にウェブサイトのユーザー名を検証しようとしています。なぜこの正規表現はスペースをキャプチャしますか?

ユーザー名の正規表現は([^a-zA-Z0-9_]{5,25})です。この正規表現とともにPHPのユーザ名にpreg_matchを呼び出します。

何らかの理由で、スペースが検出されずに通過します。私は次のように否定的な先取りを試みました:(?![a-zA-Z0-9_]{5,25})しかしまだ見たことがありません。

誰にもアイデアはありますか?

+2

だから、ユーザ名に 'a-zA-Z0-9_'を入れてはいけません。'^'の場所を確認してください。正規表現を検証してください。http://www.regexr.com/ – JustOnUnderMillions

+4

あなたはおそらく:^ [a-zA-Z0-9 _] {5,25} $ ' – anubhava

+0

ありがとうございます!私の悪い。 –

答えて

2

は、クラスで定義された以外の任意の文字に一致するnegated character classです。したがって、[^a-zA-Z0-9_]は、英数字または_文字以外の任意の文字と一致します。あなたが使用したい何

文字クラス、[a-zA-Z0-9_]、または\w/u修飾せずに、\wは同じ文字に一致する)、そしてまたアンカーです。

だから、あなたは(も改行の前に一致させることができます$しばらく(/D修飾なし)

preg_match('~^\w{5,25}$~', $s) 

それとも

preg_match('~\A\w{5,25}\z~', $s) 

\zアンカーは、文字列の最後に一致するが、使用することができますLF)char。

関連する問題