Comprobación de datosUna vez recibido un dato normalmente es necesario comprobar si el dato es del tipo esperado (número, texto, etc.) para procesarlo sin error. PHP ofrece varios conjuntos de funciones para realizar estas comprobaciones. En esta lección se explican algunas de estas funciones:
Las funciones is_ son un conjunto de funciones booleanas que devuelven si el argumento es o no de un tipo de datos determinado
| Función | Tipo de datos | alias (funciones equivalentes) | |
|---|---|---|---|
| existencia | isset($valor) | definida | |
| is_null($valor) | NULL | ||
| números | is_bool($valor) | booleano | |
| is_numeric($valor) | número (puede tener signo, parte decimal y estar expresado en notación decimal, exponencial o hexadecimal). | ||
| is_int($valor) | entero | is_integer($valor), is_long($valor) | |
| is_float($valor) | float | is_double($valor), is_real($valor) | |
| cadenas | is_string($valor) | cadena | |
| is_binary($valor) | cadena binaria | ||
| is_buffer($valor) | cadena unicode o binaria | ||
| is_unicode($valor) | cadena unicode | ||
| otros | is_scalar($valor) | escalar (entero, float, cadena o booleano) | |
| is_array($valor) | matriz | ||
| is_callable($valor) | función | ||
| is_object($valor) | object | ||
| is_resource($valor) | recurso |
El ejemplo siguiente muestra el uso de la función is_int().
| Edad:
|
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; $edad = $_REQUEST['edad']; |
Array (
[edad] => 2.5
)
NO has escrito un número entero en tu edad. |
Hay que tener en cuenta que si un dato es demasiado grande para el tipo de variable, las funciones devolverán FALSE. Por ejemplo, si se escribe un entero mayor que PHP_INT_MAX (2147483647 en Windows) la función is_int() devolverá FALSE.
Las funciones ctype_ son un conjunto de funciones booleanas que devuelven si todos los caracteres de una cadena son de un tipo determinado, de acuerdo con el juego de caracteres local. Estas funciones son las mismas que las que proporciona la biblioteca estándar de C ctype.h.
| Función | Tipo de datos |
|---|---|
| ctype_alnum($valor) | alfanuméricos |
| ctype_alpha($valor) | alfabéticos (mayúsculas o minúsculas, con acentos, ñ, ç, etc) |
| ctype_cntrl($valor) | caracteres de control (salto de línea, tabulador, etc) |
| ctype_digit($valor) | digitos |
| ctype_graph($valor) | caracteres imprimibles (excepto espacios) |
| ctype_lower($valor) | minúsculas |
| ctype_print($valor) | caracteres imprimibles |
| ctype_punct($valor) | signos de puntuación (caracteres imprimibles que no son alfanuméricos ni espacios en blanco) |
| ctype_space($valor) | espacios en blanco (espacios, tabuladores, saltos de línea, etc) |
| ctype_upper($valor) | mayúsculas |
| ctype_xdigit($cvalor) | dígitos hexadecimales |
El ejemplo siguiente muestra el uso de la función ctype_digit().
| Edad:
|
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; $edad = $_REQUEST['edad']; |
Array (
[edad] => 2.5
)
NO has escrito un número entero en tu edad. |
Las funciones filter se crearon como extensión PECL, pero ya forman parte de PHP desde la versión 5.1 y ni siquiera es necesario activarlas en php.ini.
El manual de PHP trata las funciones filter de forma breve, pero en la web pueden encontrarse tutoriales más detallados, como http://devzone.zend.com/node/view/id/1113 o http://devolio.com/blog/archives/413-Data-Filtering-Using-PHPs-Filter-Functions-Part-one.html.
La función filter más simple es la función filter_var($valor [, $filtro [, $opciones]]), que devuelve los datos filtrados o FALSE si el filtro falla.
Los filtros predefinidos son los siguientes:
| Filtro | Tipo de datos |
|---|---|
| FILTER_VALIDATE_INT | entero |
| FILTER_VALIDATE_BOOLEAN | booleano |
| FILTER_VALIDATE_FLOAT | float |
| FILTER_VALIDATE_REGEXP | expresión regular |
| FILTER_VALIDATE_URL | URL |
| FILTER_VALIDATE_EMAIL | dirección de correo |
| FILTER_VALIDATE_IP | IP |
El ejemplo siguiente muestra el uso de la función filter_var().
| Edad:
|
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; $edad = $_REQUEST['edad']; |
Array (
[edad] => 2.5
)
NO has escrito un número entero en tu edad. |
Las expresiones regulares se explican en otra lección.
El siguiente formulario permite comprobar el resultado de algunas de las funciones anteriores aplicadas a un dato recibido.
Esta obra está bajo una licencia de Creative
Commons.