今回は、ユーザーが設定したパスワードの強度を確認するための正規表現について説明します。ユーザーが設定したパスワードの強度を確認するための注意事項を実際に見てみましょう。一見。
この記事では、パスワードの強度を表す 2 つの正規表現スキームを示します。1 つは単純なもので、もう 1 つはより複雑で安全なものです。そして、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つ含まれている必要があります
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中文网其它相关文章!
推荐阅读:
以上がユーザーが設定したパスワード強度の正規表現を検証するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。