Подтвердить что ты не робот

Пароль REGEX с min 6 символами, по крайней мере, одной буквой и одним номером и может содержать специальные символы

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

  • min 6 символов, не более 50 символов
  • должен содержать 1 букву
  • должен содержать 1 номер
  • может содержать специальные символы, такие как! @# $% ^ & *() _ +

В настоящее время у меня есть шаблон: (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$

Однако он не допускает специальных символов, для кого-нибудь есть хорошее регулярное выражение для этого?

Спасибо

4b9b3361

Ответ 1

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

function checkPwd(str) {
    if (str.length < 6) {
        return("too_short");
    } else if (str.length > 50) {
        return("too_long");
    } else if (str.search(/\d/) == -1) {
        return("no_num");
    } else if (str.search(/[a-zA-Z]/) == -1) {
        return("no_letter");
    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {
        return("bad_char");
    }
    return("ok");
}

Ответ 2

после ответа jfriend00 я написал эту скрипту, чтобы проверить его решение с некоторыми небольшими изменениями, чтобы сделать его более визуальным:

http://jsfiddle.net/9RB49/1/

и это код:

checkPwd = function() {
    var str = document.getElementById('pass').value;
    if (str.length < 6) {
        alert("too_short");
        return("too_short");
    } else if (str.length > 50) {
        alert("too_long");
        return("too_long");
    } else if (str.search(/\d/) == -1) {
        alert("no_num");
        return("no_num");
    } else if (str.search(/[a-zA-Z]/) == -1) {
        alert("no_letter");
        return("no_letter");
    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+\.\,\;\:]/) != -1) {
        alert("bad_char");
        return("bad_char");
    }
    alert("oukey!!");
    return("ok");
}

btw, его работа как шарм!;)

С уважением, спасибо jfriend00, конечно!

Ответ 3

Более элегантное и автономное регулярное выражение для соответствия этим (общим) требованиям к паролю:

^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$

Элегантный прикосновение здесь состоит в том, что вам не нужны символы жесткого кода, такие как [email protected]# и т.д. Чтобы принять все символы, вы просто говорите: "Примите также все не буквенно-цифровые символы, а не цифры". Заключительная часть регулярного выражения {5,50} может быть легко изменена и соответствует минимальному и максимальному числу символов: в этом конкретном примере до 5 символов регулярное выражение возвращает несоответствие (т.е. Для проверки требуется 6 символов). Аналогично, после 50 символов он также возвращает не совпадение.

Ответ 4

У меня есть регулярное выражение, но это немного сложно.

^(?:(?<Numbers>[0-9]{1})|(?<Alpha>[a-zA-Z]{1})|(?<Special>[^a-zA-Z0-9]{1})){6,50}$

Позвольте мне объяснить это и как проверить правильность тестового пароля:

В регулярном выражении есть три названные группы. 1) "Числа": будет соответствовать одному номеру в строке. 2) "Альфа": будет соответствовать одному символу от "a" до "z" или "A" до "Z" 3) "Специальный": будет соответствовать одному символу, не являющемуся "Альфа" или "Числа"

Эти три названные группы сгруппированы в альтернативную группу, а {6,50} советует машине регулярных выражений для захвата как минимум 6 из упомянутых выше групп, но не более 50.

Чтобы обеспечить правильный ввод пароля, вам нужно проверить, есть ли совпадение, и после этого, если согласованные группы захватывают столько, сколько вам нужно. Я разработчик С# и не знаю, как это работает в javascript, но в С# вам нужно будет проверить:

match.Groups["Numbers"].Captures.Count > 1

Надеюсь, он работает одинаково в javascript! Удачи!

Ответ 5

  • Проверьте пароль от 7 до 16 символов, которые содержат только символы, числовые цифры, символ подчеркивания и первый символ должны быть буквами -

    /^ [A-Za-Z]\ш {7,14} $/

  • Проверьте пароль от 6 до 20 символов, которые содержат по крайней мере одну цифровую цифру, одну прописную букву и одну строчную букву

    /^ (? =.\Г) (? =. [А-г]) (? =. * [A-Z]). {6,20} $/

  • Проверьте пароль от 7 до 15 символов, которые содержат по крайней мере одну цифровую цифру и специальный символ

    /^ (= [0-9]?.) (=?. [@# $% ^ & Амп;]) [! A-Za-Z0-9 @# $% ^ &] {7, 15} $/

  • Проверьте пароль от 8 до 15 символов, содержащих хотя бы одну строчную букву, одну заглавную букву, одну цифровую цифру и один специальный символ

    /^ (? =.\D) (? =. [Аз]) (? =. [AZ]) (? =. [^ A-Za-Z0-9]) (?!. *\S). {8,15} $/

Надеюсь, это поможет кому-то. Для получения дополнительной информации, пожалуйста, проверьте статью и этот сайт regexr.com

Ответ 6

Я использую это

export const validatePassword = password => {
  const re = /^(?=.*[A-Za-z])(?=.*\d)[[email protected]#$%^&*()~¥=_+}{":;'?/>.<,'\-\|\[\]]{6,50}$/
  return re.test(password)
}