2017-04-03 9 views
0

正規表現複雑なパターン

  • 長さが5〜15文字の長さ
  • は、少なくとも2つの大文字
  • を有する少なくとも2つの小文字の文字
  • を持っています1桁です

私は本当にこれに固執し、これを解決するためのアイデアはありませんので、何か助けていただきありがとうございます。

答えて

5

あなたは他に何も(^$)がないことを確認すること、すべての条件をチェックするために先読みして、5〜15文字(任意の)と一致し使用することができます。

^(?=(?:.*[A-Z]){2})(?=(?:.*[a-z]){2})(?=.*\d).{5,15}$

  • ^:文字列の開始
  • (?= ):前向きに見える。どんな文字もつかみませんが、パターンが一致するかどうか調べてみましょう
  • (?: ):このグループを非キャプチャにしてください。つまり、$1または\1で参照できるキャプチャグループにはなりません0以上の文字(複数可)に続く:
  • .*\dが小文字に続いて0以上の文字(複数可):大文字
  • .*[a-z]続い0以上の文字(複数可):依存)
  • .*[A-Z]数字で
  • {2}:p再現パターンは2回一致する必要があります
  • .{5-15}:5〜15文字。
  • $:文字列の最後、あなたが例えば、testで正規表現に対して文字列をテストすることができますJavaScriptでは

var regex = /^(?=(?:.*[A-Z]){2})(?=(?:.*[a-z]){2})(?=.*\d).{5,15}$/; 
 

 
console.log(regex.test('a9B1c')); // false, missing capital letter 
 
console.log(regex.test('a9B1cD')); // true

+0

ありがとうございました、私は最近regexを使い始め、先を見たり聞いたりしませんでした。 –

0

trinctotが最初に右だったが、誰があなたのコードを使用しているかによって、これは維持/変更する方が簡単かもしれません:

var lowerPass = 2 <= (string.match(/[a-z]/g) || []).length; 
var upperPass = 2 <= (string.match(/[A-Z]/g) || []).length; 
var digitPass = 1 <= (string.match(/[0-9]/g) || []).length; 
var lengthPass = 5 <= string.length <= 15; 

var stringPass = lowerPass + upperPass + digitPass + lengthPass == 4;