Проверка пароля JavaScript RegExp не работает - PullRequest
0 голосов
/ 17 января 2019

Я попытался подтвердить свой пароль с помощью RegExp. Я написал следующий код,

    var pass = jQuery('#new_password').val(); 
    // Minimum six characters, at least one uppercase letter, one lowercase letter and one number
    var reg = new RegExp("^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{6,}$");
    if (reg.test(pass)) {
        alert(1);
    } else {
        alert(2);
    }

Однако, даже если я ввел сложный пароль в соответствии с моим требованием (минимум шесть символов, как минимум одна заглавная буква, одна строчная буква и одно число), истинная часть условия (если условие) не выполняется.

Может ли кто-нибудь помочь мне решить эту проблему? спасибо.

Ответы [ 4 ]

0 голосов
/ 17 января 2019

Вам нужно внести некоторые изменения в свое регулярное выражение.

Чтобы соответствовать минимум 6 символам, по крайней мере, 1 букве и 1 цифре, вы можете использовать следующее выражение:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

Но чтобы гарантировать, что хотя бы одна из букв также является заглавной, вам нужно добавить дополнительное условие. Выражение ниже должно соответствовать минимум 6 символам, по крайней мере, 1 заглавная буква, 1 строчная буква и 1 цифра:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"
0 голосов
/ 17 января 2019

Попробуйте что-нибудь подобное вместо этого? Разделите каждый тест, чтобы он был более управляемым. ИМО.

export function validatePassword(password, repeatPassword) {
  // password tests
  const hasUpperCase = /[A-Z]/.test(password)
  const hasLowerCase = /[a-z]/.test(password)
  const hasNumbers = /\d/.test(password)
  const hasSpecial = /\W/.test(password)
  let errors = []

  if (password !== repeatPassword) {
    errors.push('Passwords do not match.')
  }
  if (password.length < 6) {
    errors.push('Password must be at least 6 characters long.')
  }
  if (!hasUpperCase) {
    errors.push('Password must contain at least one uppercase letter.')
  }
  if (!hasLowerCase) {
    errors.push('Password must have at least one lowercase letter.')
  }
  if (!hasNumbers) {
    errors.push('Password must have at least one number.')
  }
  if (!hasSpecial) {
    errors.push('Password must have at least one special character.')
  }

  return errors
}

export default validatePassword;

Мне легче отделить каждый тест вместо одного регулярного выражения. Вы также можете предоставить пользователю конкретный сбой.

0 голосов
/ 17 января 2019

Вы можете попробовать это:

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[A-Za-z\d@$!%*#?&]{6,}$

Как показано здесь: https://regex101.com/r/GAkedL/1

Объяснение -

Здесь мы сопоставляем каждое условие отдельно, потому что в вашем коде первое предположение подразумевает «за которым следует либо строчная или прописная буква».

(?=.*?[a-z]) сообщает регулярному выражению, что пароль должен содержать 0 или более символов, за которыми следует строчная буква
(?=.*?[A-Z]) сообщает регулярному выражению, что пароль должен содержать 0 или более символов, за которыми следует заглавная буква
(?=.*?\d) сообщает регулярному выражению, что пароль должен содержать 0 или более символов, за которыми следует цифра

Обратите внимание на добавление ? после .* в каждом прогнозе. Это подразумевает, что регулярное выражение должно соответствовать как можно меньшему числу символов, прежде чем будет найдена необходимая буква или цифра, что более эффективно.

0 голосов
/ 17 января 2019

Измените свое регулярное выражение на:

^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{6,}$

не забывая флаг g.

  • При использовании: (?=.*[A-Za-z]) пройдет, если только пользовательские типы прописные или строчные буквы.

  • При использовании: (?=.*[@$!%*#?&]) требуется, чтобы пользователь набрал некоторые специальный символ.

    var pass = 'TestString123'; 
    // Minimum six characters, at least one uppercase letter, one lowercase letter and one number
    var reg = new RegExp(/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{6,}$/g);
    if (reg.test(pass)) {
        alert(1);
    } else {
        alert(2);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...