Regex для проверки пароля, который имеет по крайней мере 3 из 4 различных групп символов - PullRequest
0 голосов
/ 07 апреля 2019

Попытка написать средство проверки пароля, которое может содержать не менее 3 различных групп символов из 4 групп символов.

Состояние:

  1. пароль должен содержать не менее восьми 8 символов.
  2. пароль должен иметь 3 разных группы символов из 4 следующих Группы символов и пароль для каждой группы символов должны содержать не менее 2 символов.

    заглавная буква

    строчная буква

    цифровая

    специальные символы (! @ # $% &)

Я написал регулярное выражение в javascript:

((?=.*[a-z]{2,})(?=.*[A-Z]{2,})(?=.*[0-9]{2,})|(?=.*[a-z]{2,})(?=.*[A-Z]{2,})(?=.*[!@#$%&\/=?_.,:;\\-]{2,})|(?=.*[a-z]{2,})(?=.*[0-9]{2,})(?=.*[!@#$%&\/=?_.,:;\\-]{2,})|(?=.*[A-Z]{2,})(?=.*[0-9]{2,})(?=.*[!@#$%&\/=?_.,:;\\-]{2,})).{8,}

но это не соответствует некоторым условиям.

Некоторые из действительных паролей:

a2w4hHH #

$ # aaY5U5

YT7gh8q2

любая помощь будет оценена Спасибо:)

1 Ответ

1 голос
/ 07 апреля 2019

Будет проще написать функцию Javascript для проверки пароля, учитывая ваше требование соответствия по крайней мере любым трем из четырех требований к набору символов, вместо того, чтобы переходить к чисто регулярному решению.Чистые решения регулярных выражений просты, если бы все четыре набора символов вместо трех наших из четырех.

Проверьте эту функцию, которая должна работать так, как вам нужно.

function isPasswordValid(pass) {
  if (pass.length < 8) {
    return false;
  }
  var reg = [/[a-z]/,/[A-Z]/,/[0-9]/,/[(!@#$%&]/]
  var count = 0;
  for (var i = 0; i < reg.length;i++) {
    if (reg[i].test(pass)) {
      count++;
    }
    if (count >=3) {
      return true;
    }
  }
  return false;
}

var pwds = ['aB1@','aB1@aaaa','aaaaaaAA','$#aaY5U5','YT7gh8q2'];
for (s of pwds) {
  console.log(s + ' --> ' + isPasswordValid(s));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...