今回は、正規表現を使用してパスワードの強度を確認する方法(コード付きの2つの方法)を紹介します。 パスワードの強度を確認するために正規表現を使用する場合の注意点は何ですか?実際のケースを見てみましょう。
はじめに
ユーザー登録の際、パスワードの正規性検証が行われます。正しい正規表現を作成するには、最初に式ルールを定義する必要があります。
オプション 1 (単純)
パスワード検証が次のように定義されていると仮定します:
最小 6 桁、最大 16 桁 {6,16}
小文字 [a-z] および大文字 [A-Z]
には数字を含めることができます [0-9]
アンダースコア [_] とマイナス記号 [-] を含めることができます
上記のルールに従って、規則的なものを与えるのは簡単ですリテラル定義 次のように:
var pattern = /^[\w_-]{6,16}$/;
シナリオ 1 分析
Literal/ /
正規表現のリテラルは、1 組のスラッシュ (/) の間に含まれる文字として定義されます。例:
var pattern = /s$/;
上記リテラル 文字「s」で終わる任意の文字列と一致します。
文字クラス [ ]
文字を角括弧で囲んで文字クラスを形成します。文字クラスは、それに含まれる任意の文字と一致します。したがって、正規表現 /[abc]/ は、文字「a」、「b」、または「c」のいずれかと一致します。
文字クラスでは、ハイフンを使用して文字範囲を表すことができます。ラテン語の小文字と一致させるには、 /[a-z]/ を使用します。
文字クラス w
文字クラス w は、[a-zA-Z0-9] に相当する、ASCII 文字で構成される任意の単語に一致します。
[w_-] は、ラテン語の大文字と小文字、数字、アンダースコア、マイナス記号と一致することを意味します。
Repeat {}
正規表現で { } を使用して、要素の繰り返し回数を表します。
{n,m} は前の項目と少なくとも n 回一致しますが、m 回以下です
{n,} は前の項目と n 回以上一致します
{n} は前の項目と一致しますitem n 回の item
[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 桁、最大値は 16 桁です {6,16}
には 1 が含まれている必要があります数値
小文字が2つ含まれている必要があります
大文字が2つ含まれている必要があります
特殊文字が1つ含まれている必要があります
上記のルールに従って、次のように通常のリテラル定義を与えるのは簡単です。
var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/;
オプション 2 の分析
文字クラス
文字クラス 改行およびその他の Unicode 行終端文字を表します。前方先読みアサーション (?= )
記号 "(?=" と ")" の間に式を追加します。これは、かっこ内の式が正しく一致する必要があることを示す先読みアサーションです。たとえば、/Java(?=:)/ は Java にのみ一致し、その後にコロンが続きます。(?=.*[!@#$%^&*?()])
该先行断言表示,必须包括一个特殊字符。上述表达式中的10个特殊字符为键盘1,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;
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上が正規表現を使用してパスワードの強度を確認します (コードが添付された 2 つの方法)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。