Cách hoạt động của mẫu
| Phần | Ý nghĩa |
|---|---|
(?=.*[a-z]) | Lookahead: có ít nhất một chữ cái thường ở đâu đó |
(?=.*[A-Z]) | Có ít nhất một chữ cái hoa |
(?=.*\d) | Có ít nhất một chữ số |
(?=.*[^A-Za-z0-9]) | Có ít nhất một ký hiệu |
.{8,} | Tám ký tự trở lên tổng cộng |
Ví dụ code
JavaScript
const re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/;
re.test(value); // true or falsePython
import re
bool(re.fullmatch(r'(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}', value))PHP
preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/', $value) === 1;
Ghi chú và giới hạn
Mỗi lookahead kiểm tra một quy tắc mà không tiêu thụ ký tự nào, nên các quy tắc có thể xuất hiện theo bất kỳ thứ tự nào. Hướng dẫn hiện tại của NIST ưu tiên độ dài (từ 15 ký tự trở lên) và kiểm tra với các mật khẩu đã bị rò rỉ hơn là các quy tắc về thành phần ký tự. Bạn nên cân nhắc một quy tắc chỉ về độ dài kết hợp với thanh đo độ mạnh. Tạo nhanh một mật khẩu bằng Password Generator.
Kiểm tra Regex
Nhập mẫu và xem các kết quả khớp được tô sáng ngay trong văn bản thử nghiệm.