2013-09-04 4 views
2

мне нужно проверить пароль с этими правилами:Regex для проверки паролей с символов ограничений

  • 6 до 20 символов
  • должен содержать по крайней мере одну цифру;
  • Должен содержать хотя бы одну букву (без учета регистра);
  • Может содержать следующие символы:! @ # $% & *

следующее выражение соответствует всем, кроме последнего требования. Что я могу сделать с последним?

((?=.*\d)(?=.*[A-z]).{6,20})

+0

Не специалист по регулярному выражению, но не мог бы вы просто добавить '[! @ # \ $% & \ *]?' Тоже? – Jordan

+1

Какой язык Java, javascript .... ?? –

+0

Вы имеете в виду «может содержать следующие символы в дополнение к буквам и цифрам?» –

ответ

5

Я не совсем уверен, что я имеют это право, но так как ваш последний r equirement is "Can содержит следующие символы:! @ # $% & *« Я предполагаю, что другие специальные символы запрещены. Другими словами, единственными допустимыми символами являются буквы, цифры и специальные символы! @ # $% & *.

Если это правильная интерпретация, следующее регулярное выражение должно работать:

^((?=.*\d)(?=.*[a-zA-Z])[[email protected]#$%&*]{6,20})$ 

Обратите внимание, что я изменил свой характер класса [A-z] к [a-zA-Z], потому что [A-z] будет также включать в себя следующие символы: [\]^_ `

Я также добавил начало и конец строковых якорей, чтобы убедиться, что вы не получите частичное совпадение.

+0

Это прекрасно! – Guilherme

0

Regex может быть: -

^(?=.*\d)(?=.*[a-zA-Z])[[email protected]#$%&*]{6,20}$ 

Как насчет this в Javascript: -

function checkPwd(str) { 
    if (str.length < 6) { 
     return("too_short"); 
    } else if (str.length > 20) { 
     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"); 
} 

проверить Также из this

Смежные вопросы