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 xxx_exists()

Función function_exists()

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'];
if (function_exists('filter_var')) { if (filter_var($numero, FILTER_VALIDATE_INT)) { print "<p>Ha escrito el número entero $numero.</p>"; } else { print "<p>NO ha escrito un número entero.</p>"; } } else { print "<p>La función <strong>filter_var</strong> " ."no está disponible en este servidor.</p>"; }
?>
Array (
    [numero] => 2.5
)

La función filter_var no está disponible en este servidor.


Función array_key_exists

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


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
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'];
if (is_numeric($numero)) { print "<p>Ha escrito el número $numero.</p>"; } else { print "<p>NO ha escrito un número.</p>"; }
?>
Array (
    [numero] => cinco
)

NO ha escrito un número.

Notas:

Volver al principio de la página


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().

Número:

<?php
print "<pre>"; print_r($_REQUEST); print "</pre>\n";

$numero = $_REQUEST['numero'];
if (ctype_digit($numero)) { print "<p>Ha escrito el número entero $numero.</p>"; } else { print "<p>NO ha escrito un número entero.</p>"; }
?>
Array (
    [numero] => 2.5
)

NO ha escrito un número entero.

Volver al principio de la página


Funciones filter

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'];
if (filter_var($numero, FILTER_VALIDATE_INT)) { print "<p>Ha escrito el número entero $numero.</p>"; } else { print "<p>NO ha escrito un número entero.</p>"; }
?>
Array (
    [numero] => 2.5
)

NO ha escrito un número entero.

Nota:

Volver al principio de la página


Expresiones regulares

Las expresiones regulares se explican en otra lección.

Volver al principio de la página


Formulario para probar estas funciones

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

Enlace a ejemplo Comprobación de datos

ERROR (no puede mostrarse el objeto)

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
Autor: Bartolomé Sintes Marco
Última modificación: 27 de mayo de 2010

Creative Commons License
Esta obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 3.0 España.