Như tôi đã nói trong một nhận xét, một regex gần như chắc chắn không phải là công cụ thích hợp cho công việc này. Sẽ dễ dàng hơn khi viết một số mã lặp lại các ký tự của mật khẩu, đếm số ký tự trong mỗi lớp.
Bạn chưa xác định "ký tự đặc biệt" là gì. Tôi sẽ giả định rằng nó có nghĩa là bất kỳ ký tự nào khác ngoài một chữ cái hoặc chữ số (bao gồm dấu cách và ký tự điều khiển). Tôi cũng giả định rằng "chữ" chỉ đề cập đến 26 chữ cái trong bảng chữ cái tiếng Anh - có nghĩa là một chữ cái không phải tiếng Anh như ñ
là một ký tự đặc biệt.
Để lấy ví dụ đơn giản hơn, các regex không thể hiện rõ những thứ như "foo và bar theo thứ tự"; bạn phải chỉ định cả hai đơn hàng một cách rõ ràng:
foo.*bar|bar.*foo
Trong trường hợp này, bạn cần 12 lựa chọn khác nhau. Tôi nghĩ rằng điều này là chính xác, nhưng tôi chưa thử nghiệm nó.
[a-z].*[A-Z}|[A-Z].*[a-z}|[a-z].*[0-9]|[0-9].*[a-z]|[a-z].*[^a-zA-Z0-9]|[^a-zA-Z0-9].*[a-z]|[A-Z].*[0-9]|[0-9].*[A-Z]|[A-Z].*[^a-zA-Z0-9]|[^a-zA-Z0-9].*[A-Z]|[0-9].*[^a-zA-Z0-9]|[^a-zA-Z0-9].*[0-9]
Đây là kiểu regex hoặc phong cách Perl. grep
không nhận dạng được |
theo mặc định; nếu bạn cần một regexp grep
kiểu, hãy thay thế mỗi |
theo \|
.
Và nếu yêu cầu thay đổi, hãy yêu cầu ít nhất 3 trong số 5 lớp ký tự, bạn sẽ cần phải viết lại hoàn toàn regex; bạn không thể chỉnh sửa nó.
Lưu ý rằng các yêu cầu của bạn vẫn cho phép Aa
.
Nguồn
2013-03-01 21:07:10
* ít nhất hai trong các cách sau * .. có nghĩa là mật khẩu có hai chữ cái thường và hai chữ cái viết hoa là hợp lệ (không có số, v.v.) là hợp lệ? –
Xem [tại đây] (http://stackoverflow.com/questions/2394092/regex-for-strong-password?rq=1) hoặc [tại đây] (http://stackoverflow.com/questions/1254952/regular-expression -cho-mật khẩu? rq = 1) hoặc thậm chí có thể [ở đây] (http://stackoverflow.com/questions/2370015/regular-expression-for-password-validation?rq=1). –
Xin lỗi, mật khẩu phải chứa 2 trong số 4 nhóm ký tự, nghĩa là một chữ thường và một số hoặc một chữ cái viết hoa và một số vv –