2010-09-09 3 views
3

Может ли кто-нибудь помочь мне в написании регулярного выражения по следующему описанию?JavaScript для проверки пароля

Пароль содержит символы из по меньшей мере трех из следующих пяти категорий:

  • Заглавные буквы английского алфавита (A - Z)
  • строчные буквы английского алфавита (A - Z)
  • Base 10 цифр (! 0 - 9)
  • не алфавитно-цифровой (например, $, #, или%)
  • Unicode символы

Минимальная длина пароля: 6.

+5

Почему downvote? OP не хочет создавать вход на основе Javascript, но простое подтверждение, когда пользователь указывает пароль. –

+1

Некоторые старые комментарии о псевдосильных паролях: http://www.codinghorror.com/blog/2005/07/passwords-vs-pass-phrases.html – Douglas

+0

Это не простая задача для регулярного выражения. Как предлагает Сачин в своем ансере, было бы проще написать собственную процедуру разбора строк и подсчитать, соответствуют ли ваши критерии. – splash

ответ

3

. Лучший способ справиться с этим - разбить каждое из условий и задать регулярное выражение для каждого из условий. Затем подсчитайте, сколько было выполнено для введенного пароля. Таким образом, вы даже можете указать пользователю, является ли пароль средним, соответствует критериям или очень надежному паролю.

if (password.length < 6) { 
    alert("password needs to be atleast 6 characters long"); 
} 

var count = 0; 
//UpperCase 
if(/[A-Z]/.test(password)) { 
    count += 1; 
} 
//Lowercase 
if(/[a-z]/.test(password)) { 
    count += 1; 
} 
//Numbers 
if(/\d/.test(password)) { 
    count += 1; 
} 
//Non alphas(special chars) 
if(/\W/.test(password)) { 
    count += 1; 
} 
if (count < 3) { 
    alert("password does not match atleast 3 criterias"); 
} 

Не знаете, как сопоставить символы юникода, используя регулярное выражение. Остальные условия доступны выше.

+1

Это комментарий, а не ответ. (Полностью согласен, кстати.) –

+0

Обновлен ответ –

+0

Спасибо Sachin, он отлично работает – Abhimanyu

1

[A-Za-z!$#%\d\u0100]{6} соответствует aS1%eĀ.

\u0100 предназначено для. Вы можете вставить другие коды Юникода, которые вам нужны. Вы можете найти их here.

EDIT: для не менее 6 символов правильное регулярное выражение - [A-Za-z!$#%\d\u0100]{6,}.

EDIT 2: Чтобы включить диапазон символов Юникода (пусть это будет латинский расширенный-B), регулярное выражение должно выглядеть как ^[A-Za-z!$#%\d\u0100-\u017f]{6,}$. Вы можете найти коды кода Unicode here.

EDIT 3: Я разработал крошечную функцию, которая проверяет, соответствует ли данный пароль критериям. Вы должны определить диапазон юникодов в функции.

function isValidPassword(password) {  
    var unicodeRange = "\\u0100-\\u0105"; 
    var criteria = ["A-Z","a-z","\\d","!$#%",unicodeRange]; 

    // check whether it doesn't include other characters 
    var re = new RegExp("^[" + criteria.join("") +"]{6,}$"); 
    if(!re.test(password)) return false; 

    var minSatisfiedCondition = 3; 
    var satisfiedCount = 0; 
    for(var i=0; i < criteria.length; i++) { 
     re = new RegExp("[" + criteria[i] + "]"); 
     if(re.test(password)) ++satisfiedCount; 

    } 
    return (satisfiedCount >= minSatisfiedCondition); 
}​ 

Рабочий образец here.

+0

С помощью этих регулярных выражений вы не знаете, соответствуют ли по крайней мере 3 критерия OP. – splash

+0

@splash: Да, вы правы. Я отредактировал свой ответ и положил функцию проверки. – Zafer

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