2016-08-02 2 views
1

ユーザ名の一部に特殊文字( ' - )と空白を入れて検証する必要があります。私は、次の正規表現の助けを借りてこれを達成することができています -制限付き文字で名前を確認するための正規表現パターン

^[a-zA-z]+([ '-][a-zA-Z]+)*$ 

しかし、私は、ユーザーが、この特定の正規表現に言う25を入力できる文字の最大数に制限を追加することができません。だから誰も上記の正規表現のために同じことを行う方法を説明してくださいできますか?ありがとう。

答えて

4

あなたは26個の以上の文字を許可しない先頭に否定先読みを追加することができます:あなたはまた、タイプミス[A-z]を持って

^(?!.{26})[a-zA-Z]+([ '-][a-zA-Z]+)*$ 
    ^^^^  ^

、それは[A-Z]でなければなりません。 Difference between regex [A-z] and [a-zA-Z]を参照してください。

negative lookaheadは((?!...)は、上記構築物)(それが適切な^後に配置されていることを意味する)文字列の先頭に固定され、長さチェックがパターン部消費、右メインで解析する前に、一度だけ実行されます。

さらにhow a negative lookahead works hereをご覧ください。

+0

私は正規表現の知識のレベルはわかりません:)私は[regexone.com](http://regexone.com/)ですべてのレッスンを行うことを提案し、[regular-expressions.info](http: //www.regular-expressions.info)、[regex SO tag description](http://stackoverflow.com/tags/regex/info)(他の多くの素晴らしいオンラインリソースへのリンクがあります)正規表現はどういう意味ですか?(http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean)。また、[rexegg.com](http://rexegg.com)は見てみる価値があります。 –

+0

さらに、[regex SO docs](http://stackoverflow.com/documentation/regex/topics)を参照してください。また、正規表現を真剣に学習したい場合は、Jeffrey E. F. Friedlの「Mastering Regular Expressions」も読んでおく必要があります。 –

+0

私はRegexの初心者であり、ルーツからそれを学びたい...ありがとう。 私はリンクを通過します。 –

3

(?=.{1,25}$)を追加して、先頭に先読みを追加して最大25文字まで一致させてください。

新しい正規表現は次のようになります。^(?=.{1,25}$)[a-zA-z]+([ '-][a-zA-Z]+)*$

+0

ネガティブ先読みソリューションは短く、 '$'を置いたかどうか気にする必要はありません。 –

+0

合意。私はあなたのソリューションがより好きで、文字も少ないのが好きです。 –

+0

@WiktorStribiżew正規表現について少し深く勉強するためのリンクを教えてください。 –

関連する問題