2013-06-14 34 views
6

Độ phức tạp của mật khẩu Regex yêu cầu phải có any three trong bốn đặc điểm sau khi tạo hoặc thay đổi mật khẩu.Regex để xác thực mật khẩu trong Javascript

  • Alpha nhân vật - ít nhất 1 chữ viết hoa kí tự alpha
  • Alpha nhân vật - ít nhất 1 trường hợp thấp hơn alpha nhân vật
  • ký tự Số - ít nhất 1 số nhân vật
  • Ký tự đặc biệt - ít nhất là 1 đặc biệt nhân vật

tôi đang cố gắng với đoạn mã sau, nhưng nó không làm việc cho special characters

(?=^.{6,}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.* 

Tôi muốn regex của tôi được xác nhận đối với 4 trường hợp sau đây

trường hợp trận đấu

  • P @ ssword
  • password1
  • p @ ssword1
  • p @ 12345
+0

bản sao có thể có của [Câu hỏi RegEx để xác thực độ mạnh mật khẩu] (http://stackoverflow.com/questions/5834251/regex-question-for-password-strength-validation) – Toto

Trả lời

6

Tôi nghĩ một regex đơn sẽ là m trong trường hợp này. Bạn có thể dễ dàng làm điều gì đó như

var count = 0; 

count += /[a-z]/.test(password) ? 1 : 0; 
count += /[A-Z]/.test(password) ? 1 : 0; 
count += /\d/.test(password) ? 1 : 0; 
count += /[@]/.test(password) ? 1 : 0; 

if(count > 2) { 
    alert('valid') 
} 
+0

Tôi có thể làm điều đó với giúp đỡ của regex, đó là yêu cầu. :( Tôi đã đạt được nó bằng cách sử dụng ở trên, nhưng cần nó trong đồng bằng Regex – sivanv

+0

Đây là regex, nhưng nhiều người trong số họ – elclanrs

+1

@sivanv bạn cũng phải học, mà không phải luôn luôn là giải pháp là búa, ngay cả khi vấn đề tại đầu tiên trông giống như một móng tay –

0

Tôi nghĩ rằng bạn sẽ cần điều này cho tất cả các ký tự đặc biệt quá: [cập nhật để từ chối không gian]

$(document).ready(function(){ 
    $('input').change(function(){ 
    var count = 0; 
    var pass = $(this).val(); 
     count += /[a-z]/.test(pass) ? 1 : 0; 
     count += /[A-Z]/.test(pass) ? 1 : 0; 
     count += /\d/.test(pass) ? 1 : 0; 
     count += /[^\w\d\s]/.test(pass) ? 1 : 0; 
     (count>2 & !/[\s]+/.test(pass)) ? $(this).css('background-color','lime'):$(this).css('background-color','orange'); 
    }); 

}); 

và fiddle: jsFiddle

3

Tôi nghĩ rằng một regex bạn có thể sử dụng là:

(?=^.{6,}$)(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^A-Za-z0-9]).* 

Tôi không chắc chắn lý do tại sao bạn có quá nhiều hoặc ope rators trong regex của bạn nhưng điều này phù hợp nếu:

  • (?=^.{6,}$) - String là> 5 chars
  • (?=.*[0-9]) - Chứa một chữ số
  • (?=.*[A-Z]) - Có một ký tự hoa
  • (?=.*[a-z]) - Chứa chữ thường
  • (?=.*[^A-Za-z0-9]) - Một ký tự không phải là chữ và số.

Regular expression image

+0

Nhưng tôi cần bất kỳ một trong ba tùy chọn, không phải tất cả 4. – sivanv

+0

@sivanv Oh, nhưng không phải là regex của bạn làm việc? Xem [this] (http://www.regex101.com/r/yR1dZ8) Và bạn có thể thay đổi mật khẩu cùng một lúc để kiểm tra mật khẩu khác – Jerry

+0

+1 @Jerry để tìm ra câu trả lời có cấu trúc như vậy. r .. – Shubh

2

Sử dụng Regex này:?.

(?. =^{6,10} $) (?. = \ d) (= [az]) (? =. [AZ]) (? =. [! @ # $%^& *() _ +} {":; '?/>.<,]) (?!. \ s). $ **

+0

Hoạt động tốt, tôi đã thêm một fiddle. http://jsfiddle.net/sivanv/6upQc/2/ – sivanv

+0

không hoạt động ngay cả phần mềm, bạn có thể kiểm tra lại không ?, ngay cả/không được thoát khỏi cách thức này thậm chí hoạt động như thế nào? – CME64

+0

@ CME64 là chính xác .. Fiddle của bạn không hoạt động. – Shubh

Các vấn đề liên quan