A function I wrote last night was fairly flexible in terms of detecting whitespace, and even took into account the pesky non-breaking spaces / zero-width spaces further up the Unicode alphabet.
The benefit here was being able to isolate and identify specific Unicode indices based on their subrange.
<?php
// Returns TRUE if the ASCII value of $string matches a registered whitespace character.
// * This includes non-breaking spaces, zero-width spaces, and any unicode values below 32.
// * $string: Character to identify. If string extends past one character, the value
// is truncated and only the initial character is examined.
function is_whitespace($string){
// Return FALSE if passed an empty string.
if($string == "") return FALSE;
$char = ord($string);
// Control Characters
if($char < 33) return TRUE;
if($char > 8191 && $char < 8208) return TRUE;
if($char > 8231 && $char < 8240) return TRUE;
// Additional Characters
switch($char){
case 160: // Non-Breaking Space
case 8287: // Medium Mathematical Space
return TRUE;
break;
}
return FALSE;
}
?>
ctype_space
(PHP 4 >= 4.0.4, PHP 5)
ctype_space — Chequear posibles caracteres de espacio en blanco
Descripción
$text
)
Verifica si todos los caracteres en la string entregada,
text, crean espacios en blanco.
Parámetros
-
text -
La cadena de prueba.
Valores devueltos
Devuelve TRUE si cada caracter del texto
genera cierto tipo de espacio en blanco, o FALSE de lo
contrario. Junto con el caracter regular de espacio en blanco,
también se consideran espacios a los caracteres de
tabulación, tabulación vertical, alimentación
de línea, retorno de carro y alimentación de
formulario.
Ejemplos
Ejemplo #1 Un ejemplo de ctype_space()
<?php
$cadenas = array('cadena1' => "\n\r\t", 'cadena2' => "\narf12", 'cadena3' => '\n\r\t');
foreach ($cadenas as $nombre => $caso_prueba) {
if (ctype_space($caso_prueba)) {
echo "La cadena '$nombre' consiste completamente de espacios en blanco.\n";
} else {
echo "La cadena '$nombre' no consiste completamente de espacios en blanco.\n";
}
}
?>
El resultado del ejemplo sería:
La cadena 'cadena1' consiste completamente de espacios en blanco. La cadena 'cadena2' no consiste completamente de espacios en blanco. La cadena 'cadena3' no consiste completamente de espacios en blanco.
Notas
Nota:
Si se proporciona un integer entre -128 y 255 inclusive, se interpreta como el valor ASCII de un simple caráter (a los valores negativos se le añade 256 para permitir caracteres en el rango ASCII Extendido). Cualquier otro entero se interpreta como una cadena que contiene los dígitos decimales del entero.
Ver también
- ctype_cntrl() - Chequear posibles caracteres de control
- ctype_graph() - Chequear posibles caracteres imprimibles, con excepción de los espacios
- ctype_punct() - Chequear posibles caracteres imprimibles que no son ni espacios en blanco ni caracteres alfanuméricos
