Utilizzando rubino 1.9.2, ho il seguente codice Ruby in IRB:Perché vedo risultati diversi per questi due modelli di regex di Ruby quasi identici, e perché uno corrisponde a ciò che penso che non dovrebbe?
> r1 = /^(?=.*[\d])(?=.*[\W]).{8,20}$/i
> r2 = /^(?=.*\d)(?=.*\W).{8,20}$/i
> a = ["password", "1password", "password1", "pass1word", "password 1"]
> a.each {|p| puts "r1: #{r1.match(p) ? "+" : "-"} \"#{p}\"".ljust(25) + "r2: #{r2.match(p) ? "+" : "-"} \"#{p}\""}
Il risultato è il seguente output:
r1: - "password" r2: - "password"
r1: + "1password" r2: - "1password"
r1: + "password1" r2: - "password1"
r1: + "pass1word" r2: - "pass1word"
r1: + "password 1" r2: + "password 1"
1.) Perché i risultati sono diversi?
2.) Perché r1
corrisponde alle stringhe 2, 3 e 4? Il lookheadhead (?=.*[\W])
non si risolverebbe perché non ci sono caratteri non di parole in quegli esempi?
Potresti provare a cercare '/^(? =. * [\ D]) (? =. * ([\ W])). {8,20} $/i' e dire usare ciò che viene catturato nel catturare il gruppo '1'? (Temo che sia la cifra, ma non si sa mai) –
Risultati utilizzando Ruby 1.9.3-p327: r1: - "password" r2: - "password" r1: - "1password" r2: - "1password" r1: - "password1" r2: - "password1" r1: - "pass1word" r2: - "pass1word" r1: + "password 1" r2: + "password 1" => ["password", "1 password "," password1 "," pass1word "," password 1 "] Sembra che tu abbia trovato un bug con 1.9.2? –
Puoi includere questo nella tua domanda per favore (per una corretta formattazione) –