2017-07-11 6 views
-1

regexを使用してこれらの基準を組み合わせることは可能ですか?コード最適化の正規表現の組み合わせ

は、少なくとも8文字の少なくとも三種を含み、以下:

  • 大文字アルファ(AZ)
  • 番号(0-9)
  • 小文字アルファ(AZ)
  • 特殊文字(!、$%の^ & *()_ + |〜 - = `{} []:?";」<>、/)。
+0

を拡大しましたコードを最適化するには?一般に、単純化のために最適化すべきです。これは、これらを1つの正規表現で組み合わせない*ことを意味します。 – Bergi

+1

"*少なくとも3つのうち*"は、正規表現が吸うものの1つです。独自の基準をよりよく評価し、ビジネスルールをホスト言語で記述してください。 – Bergi

答えて

0

はい、それは可能ですあなたが使用 正規表現エンジンは、あなたが他の文字で行けば、ドット.が使用され、言われていること条件文(?(cond)yes|no)

をサポートする必要があります。あなたはこの

^(?=.{8})(?:[a-zA-Z0-9!"#$%&'()*+,\-./:;<=>[email protected][\]^_`{|}~]*?(?:(?(1)(?!))([A-Z])|(?(2)(?!))([a-z])|(?(3)(?!))([0-9])|(?(4)(?!))([!"#$%&'()*+,\-./:;<=>[email protected][\]^_`{|}~]))){3,4}[a-zA-Z0-9!"#$%&'()*+,\-./:;<=>[email protected][\]^_`{|}~]*$ 

を使用し、ASCIIの範囲で唯一の非空白文字を許可する場合は

^           # BOS 
(?= .{8})         # At least 8 chars 
(?:           # Require 3 out of the 4 types 
     .*? 
     (?: 
      (?(1) 
       (?!) 
      ) 
      ([A-Z])          # (1), Upper 
     | 
      (?(2) 
       (?!) 
      ) 
      ([a-z])          # (2), Lower 
     | 

      (?(3) 
       (?!) 
      ) 
      ([0-9])          # (3), Digit 
     | 
      (?(4) 
       (?!) 
      ) 
      ([!"#$%&'()*+,\-./:;<=>[email protected][\]^_`{|}~])  # (4), Special 
    ) 
){3,4} 
.* 
$            # EOS 

を拡大

^(?=.{8})(?:.*?(?:(?(1)(?!))([A-Z])|(?(2)(?!))([a-z])|(?(3)(?!))([0-9])|(?(4)(?!))([!"#$%&'()*+,\-./:;<=>[email protected][\]^_`{|}~]))){3,4}.*$ 

は、あなたが正確に何をしようとしている

^           # BOS 
(?= .{8})         # At least 8 chars 
(?:           # Require 3 out of the 4 types 
     [a-zA-Z0-9!"#$%&'()*+,\-./:;<=>[email protected][\]^_`{|}~]*? 
     (?: 
      (?(1) 
       (?!) 
      ) 
      ([A-Z])          # (1), Upper 
     | 
      (?(2) 
       (?!) 
      ) 
      ([a-z])          # (2), Lower 
     | 

      (?(3) 
       (?!) 
      ) 
      ([0-9])          # (3), Digit 
     | 
      (?(4) 
       (?!) 
      ) 
      ([!"#$%&'()*+,\-./:;<=>[email protected][\]^_`{|}~])  # (4), Special 
    ) 
){3,4} 
[a-zA-Z0-9!"#$%&'()*+,\-./:;<=>[email protected][\]^_`{|}~]* 
$  
+0

特殊文字セットの '/'文字をエスケープしませんでした。 –

+0

@EganWolf - エスケープする必要はありません。これは特別な文字ではありません。文字列正規表現の区切り文字、つまり正規表現のリテラル(JS、Perl、またはPhpなど)として使用されている場合は、エスケープする必要があります。私/私は文脈の中でのみ正規表現を表示します。それが生であれば(これは)、_engine_が解析するものです。 – sln

関連する問題