Una 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:
La función booleana function_exists() devuelve si la función existe o no.
Algunas de las funciones que se comentan en esta página no existen en versiones antiguas de PHP que todavía se utilizan, por lo que puede ser conveniente comprobar si una función existe antes de utilizarla.
El ejemplo siguiente muestra el uso de la función function_exists().
| Número:
|
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; $numero = $_REQUEST['numero']; |
Array (
[numero] => 2.5
)
La función filter_var no está disponible en este servidor. |
La función booleana array_key_exists($indice, $matriz) devuelve si un elemento determinado de una matriz existe o no.
Para comprobar si existe un elemento de una matriz también se puede utilizar la función isset() comentada en el apartado siguiente.
Volver al principio de la página
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 | |
| 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_numeric().
| Número:
|
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; $numero = $_REQUEST['numero']; |
Array (
[numero] => cinco
)
NO ha escrito un número. |
Notas:
Volver al principio de la página
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().
| Número:
|
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; $numero = $_REQUEST['numero']; |
Array (
[numero] => 2.5
)
NO ha escrito un número entero. |
Volver al principio de la página
Las funciones filter se crearon como extensión PECL, pero ya forman parte de PHP desde la versión 5.2 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().
| Número:
|
<?php print "<pre>"; print_r($_REQUEST); print "</pre>\n"; $numero = $_REQUEST['numero']; |
Array (
[numero] => 2.5
)
NO ha escrito un número entero. |
Nota:
Volver al principio de la página
Las expresiones regulares se explican en otra lección.
Volver al principio de la página
El siguiente formulario permite comprobar el resultado de las funciones anteriores aplicadas a un dato recibido.
Enlace a ejemplo Comprobación de datos
Notas:
Volver al principio de la página
Esta página forma parte del curso "Páginas web con PHP" disponible en http://www.mclibre.org
Esta obra está bajo una licencia de Creative
Commons Reconocimiento-CompartirIgual 3.0 España.