2011-10-25 11 views
5

Devo controllare l'input dell'utente per assicurarmi che nome, cognome (ecc ...) siano inseriti correttamente e siano validi. Devo costruire un'espressione regolare che controlla se un utente inserisce le lettere ripetuta nel nome, cognome ecc ...Lettere ripetute Catch in PHP - Espressioni regolari

Esempio:

  • AAAron = male a causa della 3 Un
  • AAron = buona
  • Hannah = buono
  • Hannnah = male a causa del 3 del N

esiste un PHP espressione regolare per la cattura di questi casi S? (Ho una conoscenza espressione regolare di base, ma questo è troppo per me)

EDIT: Ciò dovrebbe consentire numeri così: David 3 o III

Grazie

+8

Chi sei tu per convalidare il nome di qualcuno su ortografia? :) –

+0

È davvero necessario? Non dovrebbe essere necessario fare altro che convalidare, ad esempio, la lunghezza del nome. Se un utente non vuole scrivere il proprio nome, può semplicemente scrivere qualsiasi cosa che sia valida, come "John Doe". Al contrario, il tuo regexp potrebbe finire per invalidare alcuni nomi più rari/esotici. Non lo farei. –

+1

Possibile duplicato di [Come posso trovare lettere ripetute con un'espressione regolare Perl?] (Http://stackoverflow.com/questions/178837/how-can-i-find-repeated-letters-with-a-perl-regex) – breiti

risposta

14

È possibile utilizzare di nuovo riferimento per quello scopo.

preg_match('/(\w)(\1+)/', $subject, $matches); 
print_r($matches); 

i mezzi \1 ripetere la prima cattura quindi in questo caso \w.

Nel caso dell'esempio, non penso che l'uso di espressioni regolari sia la soluzione migliore, perché non contate il numero di istanze di qualsiasi carattere?

cioè

$charCountArray = array(); 
foreach ($name as $char) { 
    $charCountArray[$char]++; 
} 

riferimento all'indietro è una funzione avanzata, fortunatamente le funzioni PCRE supporta.

Nota: preg_match sarebbe partita una sola sequenza, se è necessario conoscere tutte le partite si prega di utilizzare preg_match_all

+0

molto bello grazie – Tech4Wilco

5

Prova questa espressione regolare:

/(\w)\1{2}/