2014-10-12 3 views
-1

Пароль должен содержатьКак проверить пароль, используя следующие условия?

  1. По крайней мере один заглавная буква
  2. По крайней мере, одна строчная буква
  3. По крайней мере одна цифра
  4. По крайней мере один специальный символ
  5. должно быть больше, чем 4 символов

Я пробовал - ^(?=.*\d)(?=.*[a-zA-Z])[[email protected]#$%&*]{6,20}$

+0

Я пробовал различные регулярные выражения, но не мог получить выражение, которое точно проверяет указанное выше условие – John

+0

может вы вставляете их, чтобы мы могли помочь? – SMA

+0

@John post, что regex ... –

ответ

3

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

function validatePassword(pw) { 

    return /[A-Z]/  .test(pw) && 
      /[a-z]/  .test(pw) && 
      /[0-9]/  .test(pw) && 
      /[^A-Za-z0-9]/.test(pw) && 
      pw.length > 4; 

} 
+0

«Вам не нужно регулярное выражение», но вы разместили регулярное выражение, а некоторые из них:) – casraf

+0

function validatePassword (email) { var re =/AZ/.test (pw) &&/az/.test (pw) && /0-9/.test(pw) && /[^A-Za-z0-9]/.test(pw) && pw.length> = 4; возвращение повторно.тест (электронная почта); } – John

+0

Я написал свою функцию следующим образом, но она не работает – John

2
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(\W|_)).{5,}$ 

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

if(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(\W|_)).{5,}$/.test(pwd)){ 
    // valid password 
} 

DEMO

+0

Я никогда не понимал, кто думает, что это действительно читаемый код. – jfriend00

+0

@ jfriend00 regex не предназначен для чтения. Они неприступны по своей природе –

+1

@ jfriend00 это может быть нечитаемым, но это Regex, поэтому он не предназначен для чтения, он функциональный, он эффективный, и он работает. Что с этим не так? – casraf

0

Вы можете проверить каждое условие, отделенный без регулярных выражений. Идея заключается в том, проверьте все условия (в нижнем регистре, верхний регистр, длина, число) и изменить переключатель

Demo

HTML

<label for="password">Type password</label><br/> 
<input type="text" name="password" id="password" /> 
<input type="button" name="check" id="check" onclick="check()" value="Check password!"/> 

<p id="respuesta"></p> 

Javascript

checkbt = document.getElementById("check"); 
passtxt = document.getElementById("password"); 
respuesta = document.getElementById("respuesta"); 

check = function(){ 
    texto = passtxt.value.trim(); 
    uppercase = false; 
    lowercase = false; 
    number = false; 
    lenght = false; 
    //uppercase letter  
    for (i=0; i< texto.length; i++){ 
     if (texto[i] == texto[i].toUpperCase()){ 
      uppercase = true; 
      break; 
     } else { 
      uppercase = false; 
     } 
    } 
//lowercase 
     for (i=0; i< texto.length; i++){ 
      if (texto[i] == texto[i].toLowerCase()){ 
       lowercase = true; 
       break; 
      } else { 
       lowercase = false; 
      } 
     } 

    //number 
     for (i=0; i< texto.length; i++){ 
      if (!isNaN(texto[i])){ 
       number = true; 
       break; 
      } else { 
       number = false; 
      } 
     }  


    if (texto.length < 6){ 
     lenght = false; 
    } else { 
     lenght = true; 
    } 

    if (lowercase && uppercase && number && lenght){ 
     respuesta.innerHTML = "Password is good";  
    } else { 
     respuesta.innerHTML = "Password is bad <br />" + 
     "lowercase: " + boolstr(lowercase) + "<br />"+ 
     "uppercase: " + boolstr(uppercase) + "<br />"+ 
     "number: " + boolstr(number) + "<br />"+ 
     "lenght: " + boolstr(lenght) + "<br />"; 
    } 

} 

function boolstr(val){ 
if (val == true) 
    return "true"; 
    else 
    return "false"; 
} 
0

Ниже регулярное выражение должно работать для вы ...

var pattern = /^(?=.{5,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W])/ 

HTML код

<input type="text" id="pass" /> 
<input type="button" id="btnpass" value="Test" /> 

JQuery код

var pattern = /^(?=.{5,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W])/ 

$("#btnpass").click(function(){ 
    var checkval = pattern.test($("#pass").val()); 

    if(!checkval) { 
     alert("Invalid password"); 
    } 
}); 

http://jsfiddle.net/ty72wn1g/4/

+0

Это вообще не работает. Например, 'A1 #' проверяет. Все регулярное выражение - это просто взгляд. –

+0

Спасибо за тестирование моего регулярного выражения. Над regex работает сейчас. –

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