ホームページ  >  記事  >  ウェブフロントエンド  >  パスワード強度を実装するための 2 つの JS 正規表現メソッド

パスワード強度を実装するための 2 つの JS 正規表現メソッド

小云云
小云云オリジナル
2018-03-19 10:16:133746ブラウズ

この記事では、パスワードの強度を表す 2 つの正規表現スキームを示します。1 つは単純なもので、もう 1 つはより複雑で安全なものです。そして、2 つのソリューションの分析とテスト手順をそれぞれ示します。一般に、プロジェクトの実際のニーズに基づいて、独自のパスワードの規則的な規則を定義できます。

はじめに

ユーザー登録の際、パスワードの正規性検証が行われます。正しい正規表現を作成するには、最初に式ルールを定義する必要があります。

オプション 1 (単純)

パスワード検証が次のように定義されていると仮定します:

  • 最小 6 桁、最大 16 桁 {6,16}

  • 小文字 [a-z] および大文字 [A-Z]

  • には数字を含めることができます [0-9]

  • アンダースコア [_] とマイナス記号 [-] を含めることができます

上記のルールに従って、規則的なものを与えるのは簡単ですリテラル定義 次のように:


var pattern = /^[\w_-]{6,16}$/;

シナリオ 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 分析

Character クラス。

Character クラス。改行およびその他の 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;

関連推奨事項:

JS ネイティブ オブジェクトと正規表現の詳細な説明

JavaScript 正規表現のヒント

PHP正規表現のまとめ

以上がパスワード強度を実装するための 2 つの JS 正規表現メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。