Regex cho mật khẩu mạnh

Dùng /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/ để kiểm tra xem toàn bộ chuỗi có phải là mật khẩu mạnh hợp lệ hay không. Mọi ví dụ bên dưới đều đã được thử với mẫu này, và bạn có thể mở chúng trong Regex Tester với các mẫu đã được nạp sẵn.

Cập nhật

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/
Mở trong Regex Tester
Đầu vàoKết quả
Passw0rd!✓ Khớp
C0rrect-Horse✓ Khớp
aB3$efgh✓ Khớp
password✗ Không khớp
Password1✗ Không khớp
Sh0rt!✗ Không khớp
ALLCAPS123!✗ Không khớp

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 false

Python

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.

Câu hỏi thường gặp

Regex cho mật khẩu mạnh là gì?
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/ — mẫu này khớp với toàn bộ chuỗi. Xem bảng phía trên để biết mỗi phần làm gì.
Những ví dụ nào khớp?
Trong các ví dụ đã thử, những ví dụ sau khớp: Passw0rd!, C0rrect-Horse, aB3$efgh. Các ví dụ còn lại thì không.
Làm sao để thử regex này?
Nhấn “Mở trong Regex Tester” — mẫu, cờ và văn bản mẫu sẽ tự động được tải, và các kết quả khớp sẽ được tô sáng khi bạn chỉnh sửa.