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 và (?=.*[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!
Nguồn
2009-08-22 23:48:48
Được bỏ phiếu? Có thật không? –
@Paco: Tôi không biết rằng Stack Overflow chỉ cho phép các câu hỏi khó! – LukeH
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. –