регулярное выражение (четыре варианта с тремя логинами c с регулярными) - PullRequest
0 голосов
/ 07 апреля 2020

Требования к паролю:

Пароль должен содержать три типа заглавных букв, строчных букв, цифр и специальных символов. Длина должна быть от 8 до 30 символов. Пароль не может содержать строку «Администратор»

Регулярность, которую я написал

/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z._~!@#$^&*]+$)(?![a-z0-9]+$)(?![a-z._~!@#$^&*]+$)(?![0-9._~!@#$^&*]+$)[a-zA-Z0-9._~!@#$^&*]{8,20}$/ Очевидно, неправильно.

Я не знаю, как описать вариант с четырьмя вариантами выбора -три логи c с обычной. Нужна помощь.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Не используйте для этого ни одного регулярного выражения, это будет слишком сложно, так как вам придется выписывать каждую возможную 3-комбинацию из 4 опций и чередовать каждую комбинацию с |. Разделите каждый тест на одно регулярное выражение, а затем проверьте, сколько тестов пройдено программно:

const test = (str) => {
  const hasUpper = /[A-Z]/.test(str);
  const hasLower = /[a-z]/.test(str);
  const hasNumbers = /\d/.test(str);
  const hasSpecial = /[._~!@#$^&*]/.test(str);
  if (hasUpper + hasLower + hasNumbers + hasSpecial < 3) {
    return false;
  }
  if (str.toLowerCase().includes('administrator')) {
    return false;
  }
  return str.length >= 8 && str.length <= 30;
};

Если вы также хотите убедиться, что в строке нет символов , отличных от , кроме описанных, затем:

const hasOther = /[^a-z\d._~!@#$^&*]/i.test(str);
if (hasOther) {
  return false;
}
0 голосов
/ 07 апреля 2020
let reg =/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{8,30}$/;
if(!reg.test(str) || str.toLowerCase().includes('administrator')){
  return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...