2012-08-23 77 views
20

Tôi đang cố gắng xác thực mật khẩu bằng cách sử dụng cụm từ thông dụng. Mật khẩu được cập nhật nếu chúng tôi có tất cả các ký tự dưới dạng bảng chữ cái. Tôi làm sai ở đâu ? biểu thức chính quy là đúng không?Xác thực mật khẩu biểu thức chính quy Javascript có các ký tự đặc biệt

function validatePassword() { 
    var newPassword = document.getElementById('changePasswordForm').newPassword.value; 
    var minNumberofChars = 6; 
    var maxNumberofChars = 16; 
    var regularExpression = /^[[email protected]#$%^&*]{6,16}$/; 
    alert(newPassword); 
    if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){ 
     return false; 
    } 
    if(!regularExpression.test(newPassword)) { 
     alert("password should contain atleast one number and one special character"); 
     return false; 
    } 
} 
+0

Bạn có ý gì khi không được đánh giá? –

+0

nếu mật khẩu mới nên chứa ít nhất một số và một ký tự đặc biệt. Ngay cả khi không có các điều kiện này, thanh ghi đang được cập nhật. Tôi đoán tôi có một số vấn đề với biểu thức chính quy của tôi. –

+2

Tại sao bạn thiết lập độ dài tối đa tùy ý như vậy? – ChaosPandion

Trả lời

47

Sử dụng tích cực lookahead khẳng định:

var regularExpression = /^(?=.*[0-9])(?=.*[[email protected]#$%^&*])[[email protected]#$%^&*]{6,16}$/; 

Nếu không có nó, regex hiện tại của bạn chỉ phù hợp mà bạn có 6 đến 16 ký tự hợp lệ, nó không xác thực rằng nó có ít nhất một số và ít nhất một ký tự đặc biệt. Đó là những gì mà cái nhìn trên là dành cho.

  • (?=.*[0-9]) - Xác nhận chuỗi có ít nhất một số;
  • (?=.*[[email protected]#$%^&*]) - Xác nhận chuỗi có ít nhất một ký tự đặc biệt.
+3

Có thể rút ngắn regex thành '/^(?=.*[\d])(?=.*[[email protected]#$%^&*])[\[email protected]#$%^&*]{6, 16} $/' – sQVe

+1

/^(?=.*[0-9])(?=.*[[email protected]#$%^&*])[[email protected]#$%^& *] {6,16} $ /. Kiểm tra ("12345678 @ 12") sẽ trả về true. Nếu tôi muốn bắt buộc phải bao gồm bảng chữ cái thì sao? – Bhuvan

1

Nếu bạn kiểm tra độ dài riêng biệt, bạn có thể làm như sau:

var regularExpression = /^[a-zA-Z]$/; 

if (regularExpression.test(newPassword)) { 
    alert("password should contain atleast one number and one special character"); 
    return false; 
} 
5

Đừng cố gắng và làm quá nhiều trong một bước. Giữ riêng từng quy tắc.

function validatePassword() { 
    var p = document.getElementById('newPassword').value, 
     errors = []; 
    if (p.length < 8) { 
     errors.push("Your password must be at least 8 characters"); 
    } 
    if (p.search(/[a-z]/i) < 0) { 
     errors.push("Your password must contain at least one letter."); 
    } 
    if (p.search(/[0-9]/) < 0) { 
     errors.push("Your password must contain at least one digit."); 
    } 
    if (errors.length > 0) { 
     alert(errors.join("\n")); 
     return false; 
    } 
    return true; 
} 
+0

/az/i phải là/[az]/i cũng/[0-9]/i là chính xác –

22
function validatePassword() { 
    var p = document.getElementById('newPassword').value, 
     errors = []; 
    if (p.length < 8) { 
     errors.push("Your password must be at least 8 characters"); 
    } 
    if (p.search(/[a-z]/i) < 0) { 
     errors.push("Your password must contain at least one letter."); 
    } 
    if (p.search(/[0-9]/) < 0) { 
     errors.push("Your password must contain at least one digit."); 
    } 
    if (errors.length > 0) { 
     alert(errors.join("\n")); 
     return false; 
    } 
    return true; 
} 

Có một vấn đề nào đó trong câu trả lời dưới đây vì nó không được kiểm tra toàn bộ chuỗi do sự vắng mặt của [] trong khi kiểm tra các ký tự và chữ số, điều này là đúng phiên bản

+0

Thêm chúng nếu bạn muốn giới hạn chữ hoa hoặc chữ thường: 'if (p.search (/ [az] /) <0) { errors.push ("Mật khẩu của bạn phải chứa ít nhất một chữ cái thường.") } nếu (p.search (/ [AZ] /) <0) { errors.push ("Mật khẩu của bạn phải chứa ít nhất một chữ hoa. ") }' – saada

+0

Đây là giải pháp năng động hơn, nhưng về cơ bản sử dụng cùng khái niệm này: https://jsfiddle.net/omnius/p6uxjntg/ ​​ –

10

bạn có thể làm cho bạn biểu thức chính quy của riêng chúng để xác thực javascript

/^   : Start 
    (?=.{8,})  : Length 
    (?=.*[a-zA-Z]) : Letters 
    (?=.*\d)   : Digits 
    (?=.*[!#$%&? "]) : Special characters 
    $/    : End 



     (/^ 
     (?=.*\d)    //should contain at least one digit 
     (?=.*[a-z])    //should contain at least one lower case 
     (?=.*[A-Z])    //should contain at least one upper case 
     [a-zA-Z0-9]{8,}   //should contain at least 8 from the mentioned characters 

     $/) 

Example:- /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/ 
+1

Điều này không thành công cho XYZ @ 123 –

+5

@SarasArya add '@' trong các ký tự đặc biệt. nó sẽ bắt đầu hoạt động. Nó không phải khoa học tên lửa! – mumair

2

Tôi sử dụng tập lệnh sau cho mật khẩu thư 8, ít nhất là ký hiệu, chữ hoa và chữ thường và số

function checkPassword(str) 
{ 
    var re = /^(?=.*\d)(?=.*[[email protected]#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/; 
    return re.test(str); 
} 
Các vấn đề liên quan