Cette fois, je vais vous présenter les précautions pour utiliser des expressions régulières pour vérifier la force du mot de passe. Voici quelques cas pratiques. Examinons-les ensemble.
Avant-propos
Lors de l'inscription des utilisateurs , la régularisation du mot de passe sera utilisée pour tester . Pour écrire une expression régulière correcte, vous devez d'abord définir les règles de l'expression.
Option 1 (simple)
Supposons que la vérification du mot de passe est définie comme suit :
Les 6 chiffres les plus courts, jusqu'à 16 chiffres {6,16}
peuvent contenir des lettres minuscules [a-z] et des lettres majuscules [A-Z]
Peut contenir des chiffres [0-9]
Peut contenir des traits de soulignement [_] et des signes moins [-]
Selon les règles ci-dessus, c'est facile La définition des littéraux réguliers est donnée comme suit :
var pattern = /^[\w_-]{6,16}$/;
Analyse de la solution 1
Littéral / /
Expression régulière Un littéral est défini comme un caractère contenu entre une paire de barres obliques (/), par exemple :
var pattern = /s$/;
Le littéral ci-dessus correspond à toutes les chaînes se terminant par la lettre "s".
Classe de caractères [ ]
Mettez les caractères entre crochets pour former une classe de caractères. Une classe de caractères peut correspondre à n'importe quel caractère qu'elle contient. Par conséquent, l'expression régulière /[abc]/ correspond à l'une des lettres « a », « b » ou « c ».
Les classes de caractères peuvent utiliser des traits d'union pour représenter des plages de caractères. Pour faire correspondre les lettres minuscules latines, utilisez /[a-z]/ .
Classe de caractères w
Classe de caractères w correspond à n'importe quel mot composé de caractères ASCII, équivalent à [a-zA-Z0-9].
[w_-] signifie faire correspondre toutes les lettres latines majuscules et minuscules, les chiffres, les traits de soulignement et les signes moins.
Répéter {}
Utilisez { } dans les expressions régulières pour représenter le nombre de fois qu'un élément est répété.
{n,m} correspond à l'élément précédent au moins n fois, mais pas plus de m fois
{n,} correspond au élément précédent n fois ou plus
{n} correspond à l'élément précédent n fois
[w_-]{6,16} signifie faire correspondre toutes les lettres latines majuscules et minuscules, les chiffres, les traits de soulignement et les signes moins apparaissant au moins 6 fois et au plus 16 fois.
Position de correspondance
^ Correspond au début de la chaîne, en récupération multiligne, correspond au début d'une ligne
$ Correspond à la fin de la chaîne , sur plusieurs lignes Lors de la récupération, faites correspondre la fin d'une ligne
/^w/ et faites correspondre les chaînes commençant par des lettres ou des chiffres majuscules et minuscules.
Test de l'option 1
Les résultats du test sont les suivants :
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;
Voir le code source
D'après les résultats des tests, il ressort que la solution 1 ne limite que brièvement le mot de passe et ne peut garantir la solidité du mot de passe et la sécurité du compte.
Option 2 (Sécurité)
Supposons que la vérification du mot de passe est définie comme suit :
6 chiffres les plus courts, jusqu'à 16 chiffres {6,16}
doit contenir 1 chiffre
doit contenir 2 lettres minuscules
doit contenir 2 lettres majuscules
doit contenir 1 caractère spécial
Selon Avec les règles ci-dessus, il est facile de donner la définition des littéraux réguliers comme suit :
var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/;
Analyse de la solution 2
Classe de caractères .
classe de caractères Représente n'importe quel caractère à l'exception des nouvelles lignes et des autres terminateurs de ligne Unicode.
Assertion prospective (?= )
在符号“(?=” 和 “)” 之间加入一个表达式,它就是一个先行断言,用以说明圆括号内的表达式必须正确匹配。比如: /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中文网其它相关文章!
推荐阅读:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!