2012-04-22 9 views
5

So che esiste la funzione ctype_alpha, sebbene questa restituisca FALSE quando la stringa contiene spazi (carattere spazio vuoto).Come convalidare una stringa esclusivamente alfabetica con spazi in PHP?

Come consentire caratteri alfa e spazi, ma nient'altro?

+0

Sostituire gli spazi con un numero prima di verificare? – DanRedux

+0

@DanRedux che funziona solo se la stringa non contiene numeri in anticipo. –

+0

Perché? Se contiene numeri in anticipo, verrà restituito falso correttamente. Se contiene dei numeri dopo, verrà restituito falso correttamente. L'unica cosa che farà sarà trattare gli spazi come token cattivi trasformandoli in token cattivi. – DanRedux

risposta

5
$is_alpha_space = ctype_alpha(str_replace(' ', '', $input))); 

oppure

+0

Grazie mille. Mi piace il primo. Mi sto solo chiedendo per scopi di apprendimento, come fai a sapere di quella prima? Perché non posso nemmeno dirlo con la documentazione. – Carpet

+0

Non è una funzione. Usa 'str_replace()' per rimuovere gli spazi e poi 'ctype_alpha()' per verificare che il risultato sia alfabetico. – dtbarne

+0

Capisco, ma come lo sai, quando la pagina ctype nella documentazione non lo indica (che puoi farlo) o lo fa? Non posso dire. – Carpet

2
if (preg_match("^/[a-zA-Z ]+$/", $input)) { 
    // input matches 
} 

Demo: http://ideone.com/jp6Wi
Documenti: http://php.net/manual/en/function.preg-match.php

+0

Si noti che '[az]' può [corrispondere a caratteri diversi a seconda delle impostazioni locali del sistema] (http://stackoverflow.com/questions/1930487/will-az-ever-match-accented-characters-in -preg-pcre). –

+0

C'è un refuso nella regex. Dovrebbe iniziare con '/ ^' piuttosto che '^ /'. – toxalot

+0

Si noti che questa espressione regolare consentirà una stringa con solo spazi. Questo può o non può essere il risultato desiderato. – toxalot

0

ctype_alpha(preg_replace('/\s/', '', $mystring))

L'espressione interna restituisce la stringa senza spazi, e quindi si utilizza ctype_alpha`` come si desidera

+0

Questo rientra nella categoria di ** Se non hai bisogno di sostituire le regole, devi sempre usare 'str_replace' invece di' preg_replace'. ** – toxalot

0

Rimuovere gli spazi è la strada da percorrere, ma ricorda che ctype_alpha restituisce un falso su una stringa vuota in questi giorni! Sotto il metodo che uso ...

function validateAlpha($valueToValidate, $spaceAllowed = false) { 
    if ($spaceAllowed) { 
     $valueToValidate = str_replace(' ', '', $valueToValidate); 
    } 
    if (strlen($valueToValidate) == 0) { 
     return true; 
    } 
    return ctype_alpha($valueToValidate); 
} 
Problemi correlati