Apa itu regex untuk memastikan bahwa string yang diberikan mengandung setidaknya satu karakter dari masing-masing kategori berikut.
- Huruf kecil
- Huruf kapital
- Angka
- Simbol
Aku tahu pola set individu yaitu [a-z]
, [A-Z]
, \d
dan _|[^\w]
(aku punya mereka benar, bukan?).
Tetapi bagaimana saya menggabungkan mereka untuk memastikan bahwa string berisi semua ini dalam urutan apa pun?
Jawaban:
Jika Anda memerlukan satu regex tunggal, coba:
Penjelasan singkat:
Dan saya setuju dengan SilentGhost,
\W
mungkin agak luas. Saya akan menggantinya dengan set karakter seperti ini:[-+_!@#$%^&*.,?]
(jangan ragu untuk menambahkan lebih banyak tentu saja!)sumber
.+
menjadi.*
? Saya tidak bisa membuat test case yang gagal.*
. Apakah mereka sama dalam konteks ini? "Nol atau lebih karakter" tampaknya baik - hanya mencari konfirmasi..+
menjadi.*
atau bahkan.{4,}
dalam hal ini.^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?!.*[&%$]).{6,}$
Bart Kiers, regex Anda memiliki beberapa masalah. Cara terbaik untuk melakukannya adalah ini:
Dengan cara ini Anda mencari tidak peduli apakah di awal, di akhir atau di tengah. Dalam Anda miliki, saya memiliki banyak masalah dengan kata sandi yang kompleks.
sumber
Anda dapat mencocokkan ketiga grup secara terpisah, dan pastikan semuanya ada. Juga,
[^\w]
tampaknya agak terlalu luas, tetapi jika itu yang Anda inginkan, Anda mungkin ingin menggantinya\W
.sumber
\W
dan[\W]
menghasilkan hal yang sama.