JavaScript для подтверждения пароля - PullRequest
3 голосов
/ 09 сентября 2010

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

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

  • Английские прописные буквы (A - Z) * ​​1006 *
  • Английские строчные буквы (a - z)
  • Основа из 10 цифр (0 - 9)
  • Не алфавитно-цифровые (например:!, $, #или%)
  • Unicode-символы

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

Ответы [ 2 ]

3 голосов
/ 09 сентября 2010

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

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 голос
/ 09 сентября 2010

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

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

РЕДАКТИРОВАТЬ: для минимальных 6 символов правильное регулярное выражение равно [A-Za-z!$#%\d\u0100]{6,}.

РЕДАКТИРОВАТЬ 2: включить диапазон символов Юникодаэто будет Latin Extended-B), регулярное выражение должно выглядеть как ^[A-Za-z!$#%\d\u0100-\u017f]{6,}$.Вы можете найти диапазоны кодов Unicode здесь .

РЕДАКТИРОВАТЬ 3: я разработал крошечную функцию, которая проверяет, соответствует ли данный пароль критериям.Вам нужно определить диапазон Unicode в функции.

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);
}​

Здесь есть рабочий образец .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...