2017-02-26 20 views
1

私はちょっとしたプロジェクトに取り組んでいます。私はちょうど4文字の文字列を評価する必要があります。 1 upper caseという単語、1 lower caseの単語、one digit、そして[a-zA-Z0-9]のようなランダムな文字と一致する正規表現を書く必要があります。順序は文字列では関係ありません。パスワード文字列を評価するための正規表現

ここでは、合格または不合格になるケース文字列があります。

Valid words: Abn1, GGh3, 89jK…. 

Invalid words: abcd, 112a, abDb, 2Ab, 4, AA, …. 

任意のヘルプまたはヘッドアップありがとうございます。文字列は4文字のテキストボックスのような単一入力(からのものである場合

+0

これは不明瞭です。文字列には少なくとも4文字を含める必要がありますか?単語や文字列*? [a-zA-Z] * \ d)(?= [AZ \ d] * [AZ])[a-zA- Z0-9] {4、} '](https://regex101.com/r/ej2o4T/1)。または、文字列全体が一致する必要がある場合は、['^(?=。* [AZ])(?=。* \ d)(?=。* [az])[a-zA- } $ '](https://regex101.com/r/C1HkYT/1)。 –

+0

@WiktorStribiżew、文字列には4文字しか含まれていません。 – Mubin

+0

@downvoter、これについてのあなたの良い考えは? – Mubin

答えて

3

Muultiple先読みは、あなたの答え

\b(?=[a-zA-Z0-9]*[a-z])(?=[a-zA-Z0-9]*[A-Z])(?=[a-zA-Z0-9]*[0-9])[a-zA-Z0-9]{4}\b 

(?=[a-zA-Z0-9]*[a-z]) # string contains any lowercase character 
(?=[a-zA-Z0-9]*[A-Z]) # string contains any uppercase character 
(?=[a-zA-Z0-9]*[0-9]) # string contains any digit 
[a-zA-Z0-9]{4}   # 4 characters, since the 4th is the type that can fit in any of the three 

である、あなたは

のように、 ^$で単語の境界( \b)を交換する必要があります必要があります
^(?=[a-zA-Z0-9]*[a-z])(?=[a-zA-Z0-9]*[A-Z])(?=[a-zA-Z0-9]*[0-9])[a-zA-Z0-9]{4}$ 
+0

私はこのREを環境に入れましたが、動作していないようです。 http://regexr.com/3fcvp – Mubin

+0

@Mubinシングル入力バージョンは、誰かがこれらの4文字だけを入力するためのテキストボックスを持っている場合、トップバージョンはこれらのパターンを大きなテキストで検出します。あなたの意図が何であるかによって異なります。 –

+0

はうまくいきました。 – Mubin

-1

シングル正規表現はそれを行うには良い方法ではありません。

最善の解決策にちょうどCHECあなたのルールをループ内の文字を反復する。

オプションとして、1つの大きなRegexpの代わりに、各ルールに3つの単純なRegexpsを書くことができます。

+0

正規表現は、実際にはこれを理想的に解決する方法です。式はかなり単純です。 –

+0

各テストを別々の機能に保つことを好む - 後で別々にテストを個別に変更できるようにする –

+0

これを達成するために単一の 'RE'が必要で、@ cfqueryparamの答えが私のために働いた – Mubin

関連する問題