Volver al índice Comprobación de datos

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:


Funciones is_

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'];
if (is_int($edad)) { print "<p>Tu edad es $edad</p>"; } else { print "<p>NO has escrito un número entero en tu edad.</p>"; }
?>
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.

Volver al principio


Funciones ctype_

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'];
if (ctype_digit($edad)) { print "<p>Tu edad es $edad</p>"; } else { print "<p>NO has escrito un número entero en tu edad.</p>"; }
?>
Array (
    [edad] => 2.5
)

NO has escrito un número entero en tu edad.

Volver al principio


Funciones filter

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'];
if (filter_var($edad, FILTER_VALIDATE_INT)) { print "<p>Tu edad es $edad</p>"; } else { print "<p>NO has escrito un número entero en tu edad.</p>"; }
?>
Array (
    [edad] => 2.5
)

NO has escrito un número entero en tu edad.

Volver al principio


Expresiones regulares

Las expresiones regulares se explican en otra lección.

Volver al principio


Formulario para probar estas funciones

El siguiente formulario permite comprobar el resultado de algunas de las funciones anteriores aplicadas a un dato recibido.

ERROR (no puede mostrarse el objeto)

Nota:
Tendría que mirar algunos casos particulares. Por ejemplo, si se escribe 0 la función filter_var() da FALSE en muchos casos. No sé si es porque el programa no trabaja con el dato de $_REQUEST sino el dato procesado por una función recoge().
No he puesto algunas funciones porque no forman parte de esta versión de PHP. Tendría que hacer que hiciera la comprobación y escribir el resultado o decir que la función no está disponible.
FILTER_VALIDATE_REGEXP no está porque requiere la expresión regular

Volver al principio

Esta página forma parte del curso "Páginas web con PHP" disponible en http://www.mclibre.org
Autor: Bartolomé Sintes Marco
Última modificación: 26 de febrero de 2009

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.