Maison  >  Article  >  interface Web  >  Utilisez des expressions régulières pour vérifier la force du mot de passe

Utilisez des expressions régulières pour vérifier la force du mot de passe

php中世界最好的语言
php中世界最好的语言original
2018-05-25 09:52:251910parcourir

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中文网其它相关文章!

推荐阅读:

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

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn