ホームページ  >  記事  >  ウェブフロントエンド  >  正規表現を使用してパスワードの強度を確認する

正規表現を使用してパスワードの強度を確認する

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-25 09:52:251904ブラウズ

今回は、パスワードの強度を確認するために正規表現を使用する場合の注意事項と、パスワードの強度を確認する場合に正規表現を使用する場合の

注意事項

を紹介します。以下は実際的なケースです。見てみましょう。

はじめに

ユーザー登録の際、パスワードの正規性検証が行われます。正しい

正規表現

を作成するには、まず式のルールを定義する必要があります。 オプション 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 分析

Character class.

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;

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

JS字符串方法使用步骤详解

行内元素padding和margin在什么情况下无效

以上が正規表現を使用してパスワードの強度を確認するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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