[免責事項は、それはかなり長い答えだ!]
私は文字制限で始まります。
あなたは、パスワードの始まりと終わりを示し、実際のパスワードに\S{8,20}
を使用する(?<!\S)
と(?!\S)
を使用する必要があります:
(?m)(?<!\S)\S{8,20}(?!\S)
あなたはおそらくすでに(?m)
は、複数行のために(^
と$
である知っているようにこのモードでは文字列の代わりにそれぞれ行の先頭と末尾に一致します)。
(?<!\S)
は、パスワードの前に空白文字がないことを確認します。
(?!\S)
は、パスワードの後に空白文字がないことを確認します。
今、我々はいくつかの制限を追加:
は数字で始まるか、アンダースコアができません:(?![0-9_])
パスワードの開始時に否定先読みを:(?=\S+[0-9])
肯定先読み:
(?m)(?<!\S)(?![0-9_])\S{8,20}(?!\S)
は、少なくとも一つの数字が含まれている必要がありますパスワードの冒頭に:
(?m)(?<!\S)(?![0-9_])(?=\S+[0-9])\S{8,20}(?!\S)
同じ文字で終了する必要があります:あなたは秒をキャプチャする必要がありますdを最後の文字にして逆参照を使用します。あなたはこのために\S{6,18}(\S)\1
に\S{8,20}
一部を変更することができます。
(?m)(?<!\S)(?![0-9_])(?=\S+[0-9])\S{6,18}(\S)\1(?!\S)
今それは良いことがあります。今、あなたの正規表現に
:
(?m:^([^_|^0-9]{1})
まず、あなたがそれを削除した場合、それがすべてでは何も変わりませんので、{1}冗長です。
(?m:^([^_|^0-9])
次に、アンバランスな括弧があります。それが何であるかはっきりしていませんが、私は最初のparenが意図されていなかったと思います。
(?m:^[^_|^0-9])
次に、文字クラス[^_|^0-9]
は_
、|
、^
または範囲0-9
以外の任意の文字に一致します。私は、パスワードはまたは^
で始まるで始まると確信しています。メタキャラクター|
は、文字クラスでその意味を失います!代わりに[^_0-9]
これはなる:あなたはこれを使用することができ
(?m:^[^_0-9])
それは、これを使用しても大丈夫ですが、あなたは、これは、パスワードの最初の文字であることを心に留めておく必要があります。あなたは8〜20文字の範囲を尊重しており、それはちょうど7,19に変更されています。そこに残されている唯一のことは、スペースも受け入れるということです。
(?<finalTwo>(?i:\S{1}))(?i:\<finalTwo>)
まず非キャプチャグループで、大丈夫、という名前のキャプチャグループです:次のいずれかが、
(?m:^[^_0-9 ])
さて、良く見える:あなたはこれを回避するために、文字クラスで1を置くことができます正規表現にアルファベットがないので大文字小文字の非感受性モードがオンになり、非キャプチャグループに\S{1}
が含まれます。再び、{1}
は冗長です。それと(?i)
モードを削除し、これは次のようになります。それは、最後の2つの文字に一致した場合、それは実際に働くだろう、そう悪くはない
(?<finalTwo>\S)(?:\<finalTwo>)
を。
(?=.*\d)
よく機能します。 0-9
以外の文字が一致することがわかるかもしれませんが、気にしない場合はほぼ同じです。 2つのパスワードがテキストの隣にスペースで区切られていると、意図した通りに行かなくなる可能性があるので、の代わりに.
を使用する方が良いでしょう。
(\S*)
その部分は多かれ少なかれ大丈夫です。制限はありません。
(?=\S*\d)(?m:^[^_0-9 ])(\S*)(?<finalTwo>\S)(?:\<finalTwo>)
今、(?m:^[^_0-9])
は一つの文字を取って、(?<finalTwo>\S)(?:\<finalTwo>)
は、2つの文字を取り、3の合計のためにあなたは、このように課す制限があることを覚えて、オーケー:
(?=\S*\d)(?m:^[^_0-9 ])(\S{5,17})(?<finalTwo>\S)(?:\<finalTwo>)
それはほとんど機能し、そしてあなたより長いパスワードの部分一致を防ぐために何かを置く必要があるだけです。通常は単語境界\b
を使用できますが、シンボルについては何も言及されていないので、[email protected]*&AUn++
のようなパスワードも許可されていると仮定することは安全です。だから私は否定的なルアラウンドの使用を提案しています。