Ký tự ?= trong Regular Expression Javascript

Mn cho em hỏi: Trong cấu trúc trên mạng có ghi các sử dụng ?= là x(?=y) => khớp x khi theo sau x là y. Mak em thấy trên mạng có đoạn regex dạng (?=y) bị khuyết x. Cụ thể như đoạn mã dưới:
^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$
Mong ai biết giải đáp giúp em ý nghĩa của (?=y) khuyết x trong đoạn mã với ạ. Nếu được dịch hộ em cả đoạn mã. em cảm ơn ạ

Đoạn mã regex bạn hỏi ở trên có nhiệm vụ kiểm tra độ mạnh của mật khẩu
Regex cơ bản sẽ có ký tự bất kì ., Số lần lập bất kì *, Chứa 1 kí tự in hoa [A-Z], Chứa kí tự thường [a-z], Chứa 1 số [0-9], Kí tự đặc biệt [!@#%] Chuỗi ít nhất 8 kí tự {8}

?= sẽ tìm trong chuỗi những đoạn có yêu cầu như chứa kí tự hoa, thường. Bạn hiểu nó như lệnh if để kiểm tra password có chứa những đoạn kí tự đứng sau hay không, có thì nó sẽ tiếp tục nối với điều kiện tiếp theo

Và đoạn regex trên sẽ kiểm tra:
Dãy password có chứa 2 ký tự in hoa không? Có chứa kí tự đặc biệt không? Có chứa 2 kí tự số và ký tự thường không? Và có đủ 8 ký tự không?

Nếu bạn muốn tìm hiểu thêm có thể đọc ở:
https://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group-what-does-do
https://kipalog.com/posts/30-doan-bieu-thuc-chinh-quy-ma-lap-trinh-vien-web-nen-biet

4 Likes

Em cảm ơn anh ạ! :grinning:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?