Pertanyaan ini adalah komplikasi dari masalah di Regex: Saya ingin ini DAN itu DAN itu... dalam urutan apa pun. solusi yang paling banyak dipilih dari pertanyaan ini adalah:

^(?=.*one)(?=.*two)(?=.*three).*$

Sekarang bagaimana jika saya perlu memeriksa tidak hanya kumpulan karakter, tetapi juga jumlah karakter dari jenis tertentu? Sebagai contoh:

  • Setidaknya dua huruf besar Latin
  • Setidaknya dua huruf kecil Latin
  • Setidaknya dua digit
  • Setidaknya dua karakter khusus yang ditentukan

... adalah perintah apapun.

Saya tidak tahu harus mulai dari mana karena saya tidak mengerti apa yang ?=. lakukan dalam kasus kami.

0
Takesi Tokugawa YD 3 Juli 2020, 06:24

1 menjawab

Jawaban Terbaik

Salah satu opsi untuk menangani empat persyaratan tambahan adalah dengan menambahkan pernyataan lookahead positif tambahan:

^
    (?=.*one)                                             match "one" (in any order)
    (?=.*two)                                             match "two"
    (?=.*three)                                           match "three"
    (?=[^A-Z]*[A-Z][^A-Z]*[A-Z])                          two uppercase letters
    (?=[^a-z]*[a-z][^a-z]*[a-z])                          two lowercase letters
    (?=\D*\d\D*\d)                                        two digits
    (?=[A-Za-z0-9]*[^A-Za-z0-9][A-Za-z0-9]*[^A-Za-z0-9])  two symbols (two non alphanumeric)
    .*                                                    consume the input
$

Demo

2
Tim Biegeleisen 3 Juli 2020, 04:22