2012-04-22 29 views
5

Sé que existe la función ctype_alpha, aunque esta devolverá FALSE cuando la cadena contiene espacios (carácter de espacio en blanco).¿Cómo se puede validar una cadena exclusivamente alfabética con espacios en PHP?

¿Cómo permito caracteres alfabéticos y espacios, pero nada más?

+0

¿Reemplazar espacios con un número antes de verificar? – DanRedux

+0

@DanRedux que solo funciona si la cadena no contiene números de antemano. –

+0

¿Por qué? Si contiene números de antemano, devolverá falso de manera correcta. Si contiene números después, devolverá falso de manera correcta. Lo único que hará es tratar los espacios como tokens malos convirtiéndolos en tokens malos. – DanRedux

Respuesta

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

o

$is_alpha_space = preg_match('/^[a-z\s]*$/i', $input); 
+0

Muchas gracias. Me gusta el primero. Me pregunto por motivos de aprendizaje, ¿cómo sabes sobre el primero? Porque ni siquiera puedo decirlo por la documentación. – Carpet

+0

No es una función. Utiliza 'str_replace()' para eliminar espacios y luego 'ctype_alpha()' para verificar que el resultado de eso sea alfabético. – dtbarne

+0

Lo entiendo, aunque ¿cómo lo sabe, cuando la página de tipo de la documentación no lo señala (que puede hacer eso), o sí? No puedo decir. – Carpet

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

Demostración: http://ideone.com/jp6Wi
Docs: http://php.net/manual/en/function.preg-match.php

+0

Sin embargo, tenga en cuenta que '[az]' puede [coincidir con diferentes caracteres según la configuración regional del sistema] (http://stackoverflow.com/questions/1930487/will-az-ever-match-accented-characters-in -preg-pcre). –

+0

Hay un error tipográfico en la expresión regular. Debería comenzar con '/ ^' en lugar de '^ /'. – toxalot

+0

Tenga en cuenta que esta expresión regular permitirá una cadena con solo espacios. Ese puede o no ser el resultado deseado. – toxalot

0

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

La expresión interno devuelve la cadena sin espacios, y luego se utilizan ctype_alpha`` como desee

+0

Esto cae bajo la categoría de ** Si no necesita reglas de reemplazo elegantes, siempre debe usar 'str_replace' en lugar de' preg_replace'. ** – toxalot

0

Eliminar los espacios es el camino a seguir, pero recuerde que ctype_alpha da como resultado un falso en una cadena vacía en estos días! Debajo del método que uso ...

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