2015-09-29 5 views
1

Счетчик паролей направляет пользователя на разработку надежного пароля. Я бы хотел, чтобы на счетчике были введены требования к паролю ниже. Я добавил выделенный код ниже в RegEx, однако код не определяет необходимые правила пароля. Каков правильный код для определения требований ниже?Проверка счетчика паролей - RegEx

  • 8+ символов
  • Верхний и строчные буквы
  • Специальные символы
  • не должны содержать 4+ непрерывных букв
  • не должны содержать 4+ непрерывные числа

Пример:
Тест% 401 = Недостаточно
2323Ejsdh! ! = Недостаточный
TLV 897% = Сильные
302^PLs # = Strong

enter image description here enter image description here

enter image description here

if(val.length > 7 && val.match(/\d{4}/) && val.match(/[a-zA-Z]{4}/) && val.match(/[~,!,@,#,$,%,^,&,*,(,),+,-,?]/)) 
+1

Вы намеревались сопоставить запятые с '/ [~,!, @, #, $,%, ^, &, *, (,), +, -,?] /'? Если да, то этого достаточно. и дефис должен быть в конце класса. –

+0

No. Извините. Запятые могут отделять специальные символы. – Elvis

+1

* 3 + непрерывные буквы * - ни один из примеров не соответствует этому. У всех есть 3 непрерывных буквы. –

ответ

1

Здесь вы один-регулярное выражение подход для вашей задачи:

^(?=.*[a-zA-Z])(?=.*[^\w\s])(?!.*(?:[a-zA-Z]{4}|\d{4})).{8,}$ 

Если вам нужно соответствовать определенным «специальным» символам, используйте свой класс [[email protected]#$%^&*()+?-] вместо [^\w\s] (не символ слова или пробела). Ломая:

var rx = RegExp ("^" +       // Start of string 
       "(?=.*[a-zA-Z])" +    // Letter is required 
       "(?=.*[^\\w\\s])" +    // A special character is required 
       "(?!.*(?:[a-zA-Z]{4}|\\d{4}))" + // No 4 letters or digits on end are allowed 
       ".{8,}" +      // The whole length can be 8 or more characters 
       "$"        // End of string 
      ); 

Вот рабочий фрагмент кода:

var ins = "Test%401"; 
 
var ins1 = "2323Ejsdh!"; 
 

 
var strong1 = "Tlv!897%"; 
 
var strong2 = "302^PLs#"; 
 

 
var rx = RegExp ("^" +       // Start of string 
 
       "(?=.*[a-zA-Z])" +    // Letter is required 
 
       "(?=.*[^\\w\\s])" +    // A special character is required 
 
       "(?!.*(?:[a-zA-Z]{4}|\\d{4}))" + // No 4 letters or digits on end are allowed 
 
       ".{8,}" +      // The whole length can be 8 or more characters 
 
       "$"        // End of string 
 
       ); 
 
document.getElementById("r").innerHTML += rx.test(ins) + "<br/>"; 
 
document.getElementById("r").innerHTML += rx.test(ins1) + "<br/>"; 
 
document.getElementById("r").innerHTML += rx.test(strong1) + "<br/>"; 
 
document.getElementById("r").innerHTML += rx.test(strong2) + "<br/>";
<div id="r"/>

Другой способ разделить условия:

function CheckPass(val) { 
 
    if(val.length <= 7) { 
 
     return "Password is too short!"; 
 
    } 
 
    else if (/\d{4}/.test(val)) { 
 
      return "Password contains 4 digits on end!"; 
 
    } 
 
    else if (/[a-zA-Z]{4}/.test(val)) { 
 
      return "Password contains 4 letters on end!"; 
 
    } 
 
    else if (!/[[email protected]#$%^&*()+?-]/.test(val)) { 
 
      return "Password must contain at least one special character from the \"[email protected]#$%^&*()+?-\" set!"; 
 
    } 
 
    else if (!/[a-z]/i.test(val)) { 
 
      return "Password must contain at least one letter!"; 
 
    } 
 
     else 
 
      return "Password is strong!"; 
 
} 
 
    
 
document.getElementById("r").innerHTML += "<b>Test%401</b>: "+CheckPass("Test%401") + "<br/>"; 
 
document.getElementById("r").innerHTML += "<b>2323Ejsdh!</b>: "+CheckPass("2323Ejsdh!") + "<br/>"; 
 
document.getElementById("r").innerHTML += "<b>23!34%12!</b>: "+CheckPass("23!34%12!") + "<br/>"; 
 
document.getElementById("r").innerHTML += "<b>23w34W12D</b>: "+CheckPass("23w34W12D") + "<br/>"; 
 
document.getElementById("r").innerHTML += "<b>Tlv</b>: "+ CheckPass("Tlv") + "<br/>"; 
 
document.getElementById("r").innerHTML += "<b>Tlv!897%</b>: "+CheckPass("Tlv!897%") + "<br/>"; 
 
document.getElementById("r").innerHTML += "<b>302^PLs#</b>: "+ CheckPass("302^PLs#");
<div id="r"/>

+0

Спасибо @stribizhev Может ли он поймать 4 буквы или цифры в начале и в течение длины пароля?Вы упомянули, что «на конец разрешено» – Elvis

+1

Нет, использование групп захвата внутри негативного внешнего вида не имеет смысла, поскольку совпадения не будет. Вам нужно разделить регулярное выражение так, как это делается в вашем вопросе. Как только я смогу, я отвечу с раздельной версией. –

+1

Я добавил фрагмент с функцией, возвращающей сообщения, исходя из того, является ли пароль сильным или пропускает что-то важное. –

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