https://www.cnblogs.com/ifat3/p/8534525.html
https://blog.csdn.net/dier4836/article/details/7631504
https://blog.csdn.net/u010156024/article/details/45673581
https://blog.csdn.net/xpf_user/article/details/78496758
簡単に
本論文では、簡単で、より複雑で安全な2つの正規表現パスワード強度プログラムを、提供します。そして2つの分析手順及び試験プログラムを与えられています。一般的には、自分のプロジェクトの実際のニーズに応じて、自分の通常の規則に自分のパスワードを定義することができます。
序文
ユーザ登録は、定期的なパスワードの検証に使用されるとき。正しい正規表現を書き込むには、最初の式のルールを定義します。
シナリオ1(シンプル)
次のようにパスワードの検証ルールが定義されて行うこととします
- 最小6、6、16}、{16まで
- これは、大規模な母小文字[AZ]と大文字を含んでいてもよい[AZ]
- 数を含むことができる[0-9]
- アンダースコア[_]とマイナス含まれていてもよい[を - ]
上記の規則によれば、次のように正のリテラルが定義されている与えることは容易です。
var pattern = /^[\w_-]{6,16}$/;
シナリオ1つの分析
リテラル/ /
正規表現は、例えば、スラッシュ(/)を含む対の間のリテラル文字として定義されます。
var pattern = /s$/;
文字列の末尾の文字「s」が持つすべての上記のリテラルマッチ。
文字クラス[]
文字は、文字クラスの形成に角括弧に入れました。文字クラスは、それが含まれている任意の文字に一致します。このように、正規表現/[abc]/
にして任意の文字「A」、「B」、 「C」 が一致しました。
文字クラスは、文字の範囲を表すためにハイフンを使用することができます。ラテン小文字を一致させるために使用することができます/[a-z]/
。
文字クラス\ワット
Characterクラスは \w
、任意の単語のASCII文字に一致する[-ZA-Z0-9]に相当します。
[\w_-]
これは、任意のラテン語の大文字と小文字、数字、プラスアンダースコアとマイナス記号と一致することを意味します。
繰り返し{}
{N}で使用される表現は、繰り返しの要素の数を表現します。
{n,m}
試合前に少なくともn回ではなく、M回以上{n,}
直前のn回以上一致{n}
試合前のN倍
[\w_-]{6,16}
これは、任意の大文字のラテンと小文字、数字、アンダースコアとマイナス記号プラス少なくとも6倍に一致するまでの16倍を意味します。
マッチング位置
- ^は、ラインマッチングの開始、マルチラインの取得に、文字列の先頭にマッチ
- $は、複数行の検索に、マッチラインの端部を文字列の末尾に一致し
/^\w/
文字列の先頭に小文字または数字にマッチします。
シナリオ1つのテスト
試験結果を以下に示します:
var pattern = /^[\w_-]{6,16}$/;
pattern.test('123456') = true;
pattern.test('-ifat33') = true; pattern.test('42du') = false; pattern.test('du42du42du42du421') = false; pattern.test('42du42@') = false;
テスト結果は、アカウントが強さとセキュリティパスワードを確保することができない、スキーム1は、単純な定義されているパスワードを行い、見ることができます。
シナリオ2(安全)
次のようにパスワードの検証ルールが定義されて行うこととします
- 最小6、6、16}、{16まで
- それはデジタルが含まれている必要があります
- 図2は、小文字が含まれている必要があります
- これは、2つの大文字を含める必要があります
- これは、特殊文字が含まれている必要があります
上記の規則によれば、次のように正のリテラルが定義されている与えることは容易です。
var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/;
シナリオ2つの分析
Characterクラス。
Characterクラスは、改行や他のUnicodeの行末を除く任意の文字を表します。
前進1アサーション (?= )
表記「(?=」と「)」を正しく一致させる必要があり、括弧内の式を説明するために、それは最初の表明である、発現の間に添加しました。例:/Java(?=\:)/
Javaだけにマッチし、コロンが続きます。
(?=.*[!@#$%^&*?\(\)])
最初の主張は、その特殊文字を含まなければならないと述べました。上記の式10は、特殊文字である2 ...キーキーボードの文字0をシフト、他の特殊文字を追加することができます。注:文字は特別な意味を持っている正規表現で追加する場合は、シンボルの前にバックスラッシュを追加する必要があります()脱出しました。
シナリオ2のテスト
試験結果を以下に示します:
var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/;
pattern.test('du42DU!') = true;
pattern.test('duDUd!') = false; pattern.test('42dud!') = false; pattern.test('42DUD!') = false; pattern.test('42duDU') = false; pattern.test('42duU(') = false; pattern.test('42dUU!') = false;
上記のテスト、パスワードのセキュリティと十分に強いからわかるように。あなたは、ニーズを予測する正規表現の上に、独自の調整を行うことができます。
パスワードの強度を検証するための正規表現
-
プライベートint型CheckSecurity(文字列の PWD)
-
{
-
Regex.Replace(戻るPWD、 、:"()+ $ | {6、})()| |([AZ])|([0-9])([AZ])。?。^を(" " $ 1 $ 2 $ 3 $ 4 $ 5" )の長さ。
-
}
インターネットは、パスワードの強度を確認するための様々な方法を見て、しかし、すべての長ったらしいです。
今日は偶然に取得するための定期的な、そして唯一の文を利用して、非常に牛のXを発見しました。
概要:
パスワードの文字は、次のとおりですので、上の小文字、大文字、数字、記号などを;
この定期的なグループは、5人は最初の4つのグループは、この文字列の組み合わせが含まれているどのように多くを教えてくれるキャプチャ、キャプチャを取得します(マッチの数は組み合わせの代表者の数を返すように)
ストリングが6未満である場合、これは1の第五の捕捉基(すなわち、強度は1である)を与えるであろう、入力がない場合でも、グループ5(強度0)を与えることはありませんキャプチャ
単語の機能が、しかし、定期的にかなりの数の知識をテストするには、次の範囲、含まれ、長さ、キャプチャ、置き換えを。それを崇拝します!
しかし、著者は一見、私が思うに、改善することができるように正しく右の問題を特定していない全角文字などの特殊文字、でなければならないことを言います。通常の使用には影響しません。