Kriteria kekuatan kata sandi saya adalah sebagai berikut:
- Panjang 8 karakter
- 2 huruf dalam Huruf Besar
- 1 Karakter Khusus
(!@#$&*)
- 2 angka
(0-9)
- 3 huruf dalam Huruf Kecil
Dapatkah seseorang tolong beri saya regex untuk hal yang sama. Semua ketentuan harus dipenuhi dengan kata sandi.
password
danhello123
kata sandi yang valid!").Jawaban:
Anda dapat melakukan pemeriksaan ini menggunakan pernyataan pandangan ke depan yang positif:
Tautan rubular
Penjelasan:
sumber
n
, ganti.{8}
dengan.{n,}
Anda dapat menggunakan pandangan positif nol panjang untuk menentukan masing-masing kendala Anda secara terpisah:
Jika mesin regex Anda tidak mendukung
\p
notasi dan ASCII murni sudah cukup, maka Anda dapat mengganti\p{Lu}
dengan[A-Z]
dan\p{Ll}
dengan[a-z]
.sumber
Jawaban yang diberikan di atas sempurna tetapi saya menyarankan untuk menggunakan beberapa regex yang lebih kecil daripada yang besar.
Membagi regex panjang memiliki beberapa keunggulan:
Umumnya pendekatan ini menjaga kode mudah dipelihara .
Karena itu, saya membagikan sepotong kode yang saya tulis di Swift sebagai contoh:
sumber
Saya sarankan menambahkan
sumber
solusi codaddict berfungsi dengan baik, tetapi yang ini sedikit lebih efisien: (sintaks Python)
Kelas karakter yang dinegasikan mengkonsumsi semuanya hingga karakter yang diinginkan dalam satu langkah, membutuhkan nol mundur. (Solusi titik bintang berfungsi dengan baik, tetapi membutuhkan beberapa langkah mundur.) Tentu saja dengan string target pendek seperti kata sandi, peningkatan efisiensi ini akan diabaikan.
sumber
(?#
dan diakhiri dengan a)
. Tidak ada parens tidak seimbang di regex ini.sumber
Solusi @ codaddict akan berfungsi.
Anda juga harus mempertimbangkan untuk mengubah beberapa aturan Anda menjadi:
Dengan peningkatan di atas, dan untuk lebih fleksibel dan mudah dibaca, saya akan memodifikasi regex menjadi.
Penjelasan Dasar
Penjelasan detail
Dan terakhir, untuk tujuan pengujian di sini adalah robulink dengan regex di atas
sumber
Untuk PHP, ini berfungsi dengan baik!
dalam hal ini hasilnya benar
Thsks for @ridgerunner
sumber
return preg_match("/^(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^0-9]*[0-9]){2}).{8,}$/", 'CaSu4Li8')
?Solusi lain:
sumber
Kata sandi harus memenuhi setidaknya 3 dari 4 aturan kompleksitas berikut,
[setidaknya 1 karakter huruf besar (AZ) setidaknya 1 karakter huruf kecil (az) minimal 1 digit (0-9) setidaknya 1 karakter khusus - jangan lupa memperlakukan ruang sebagai karakter khusus juga]
setidaknya 10 karakter
paling banyak 128 karakter
tidak lebih dari 2 karakter identik berturut-turut (mis., 111 tidak diizinkan)
'^ (?!. (.) \ 1 {2}) ((? =. [Az]) (? =. [AZ]) (? =. [0-9]) | (? =. [Az] ) (? =. [AZ]) (? =. [^ A-zA-Z0-9]) | (? =. [AZ]) (? =. [0-9]) (? =. [^ A -zA-Z0-9]) | (? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])). {10.127} $ '
(?!. * (.) \ 1 {2})
(? =. [az]) (? =. [AZ]) (? =. * [0-9])
(? =. [az]) (? =. [AZ]) (? =. * [^ a-zA-Z0-9])
(? =. [AZ]) (? =. [0-9]) (? =. * [^ A-zA-Z0-9])
(? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])
. {10.127}
sumber
Sayangnya semua regex di atas tidak bekerja untuk saya. Aturan dasar kata sandi yang kuat adalah
Jadi, Regex Terbaik adalah
Regex di atas memiliki panjang minimum 8. Anda dapat mengubahnya dari {8,} ke { any_number ,}
Modifikasi dalam aturan?
mari kita katakan Anda ingin minimum x karakter huruf kecil, y karakter huruf kapital, z nomor karakter, total panjang minimum w . Kemudian coba di bawah regex
Catatan: Ubah x , y , z , w di regex
Sunting: Jawaban regex yang diperbarui
Edit2: Menambahkan modifikasi
sumber
12345678
, Anda yakin itu kata sandi yang kuat ? Silakan, coba regex Anda sebelum memposting.