2009-08-22 43 views
13

Có ai giúp tôi viết một biểu thức chính quy để kiểm tra xem mật khẩu có ít nhất một chữ cái và một số trong đó không?Cụm từ thông dụng để kiểm tra xem mật khẩu đã cho có chứa ít nhất một số và một chữ cái trong C# không?

Tôi có yêu cầu mật khẩu người dùng phải là chữ và số và tôi muốn có thể kiểm tra bằng cách sử dụng cụm từ thông dụng.

+0

Được bỏ phiếu? Có thật không? –

+10

@Paco: Tôi không biết rằng Stack Overflow chỉ cho phép các câu hỏi khó! – LukeH

+0

Tôi đồng ý với Luke. Stack Overflow không phải dành cho chuyên gia dày dạn có vấn đề giải mã bytecode, hoặc 'tài liệu WMI' ở đâu. –

Trả lời

2
bool isValid = Regex.IsMatch(password, @"[a-zA-Z]") && 
       Regex.IsMatch(password, @"\d"); 
7

Nếu bạn muốn nó trong một regex bạn có thể sử dụng "[a-zA-Z].*\\d|\\d.*[a-zA-Z]" mặc dù hai kiểm tra riêng biệt có thể dễ đọc hơn.

Edit: Một cách tiếp cận với hai séc, mà tôi tìm thấy khá dễ đọc, có thể trông như thế này:

Regex.IsMatch(password, "\\d") && Regex.IsMatch(password, "[a-zA-Z]") 
+0

Và sau đó bạn cần kiểm tra thêm để kiểm tra xem nó có chỉ ký tự chữ và số hay không. –

21

lookahead Positive là những gì bạn đang tìm kiếm. Regex trông như thế này:

(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]+ 

Ở đây, (?=.*[A-Za-z]) là lookahead tích cực mà khẳng định rằng chuỗi của bạn như ít nhất một nhân vật(?=.*[0-9]) khẳng định rằng nó có ít nhất một chữ số. Điều quan trọng cần lưu ý là lookahead tích cực không trả về một trận đấu, mà đúng hơn là khẳng định liệu một trận đấu có tồn tại hay không. Vì vậy, bạn nên đọc regex trước đó là "khẳng định rằng nó có ít nhất một ký tự; khẳng định nó có ít nhất một chữ số; bây giờ chúng ta biết các xác nhận đã trôi qua, chỉ cần kiểm tra ký tự chữ và số".

Điều này rất thú vị vì nó cho phép bạn dễ dàng kết hợp các yêu cầu xác thực của ứng dụng của bạn, mà không làm cho regex của bạn trở nên phức tạp. Ví dụ, nếu bây giờ bạn đòi hỏi chuỗi có chính xác 20 ký tự, bạn chỉ cần thêm một sự khẳng định lookahead tích cực mới, như vậy:

(?=[A-Za-z0-9]{20})(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]+ 

Hy vọng nó sẽ giúp!

+0

tại sao không phải điều này? (? =. * [A-Za-z]) (? =. * [0-9]) [A-Za-z0-9] {20} –

+0

Tại sao bạn cần '. *' Trong cái nhìn tích cực của bạn? Tôi không hiểu làm thế nào kết quả sẽ khác nếu bạn bỏ qua nó. – xr280xr

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