Son varias las funciones que PHP nos facilita para las validaciones, esta vez hablaremos un poco de las funciones de filtro.
A continuación una lista de las funciones filter:
- filter_has_var - verifica si la variable del tipo especificado existe
- filter_id - devuelve el ID del filtro con el nombre dado
- filter_input_array - obtiene múltiples variables desde afuera de PHP y opcionalmente las filtra
- filter_input - obtiene una variable desde afuera de PHP y opcionalmente la filtra
- filter_list - devuelve una lista de todos los filtros soportados
- filter_var_array - obtiene múltiples variables y opcionalmente las filtra
- filter_var - filtra una variable con un filtro especÃfico
- filter_id - devuelve el ID del filtro con el nombre dado
- filter_input_array - obtiene múltiples variables desde afuera de PHP y opcionalmente las filtra
- filter_input - obtiene una variable desde afuera de PHP y opcionalmente la filtra
- filter_list - devuelve una lista de todos los filtros soportados
- filter_var_array - obtiene múltiples variables y opcionalmente las filtra
- filter_var - filtra una variable con un filtro especÃfico
Los filtros son constantes que usaremos en algunas de las funciones mencionadas arriba; tenemos una lista pre-definida: Validate filters (filtros de validación), Sanitize filters (filtros de saneamiento), Filter flags (opciones de filtro), Other filters.
Para este articulo nos centraremos en los filtros de validación:
Lafunción filter_list como su nombre lo indica, nos devuelve una lista con los nombre de filtros:
devuelve:
filter_id devuelve el identificador para un determinado nombre de filtro.
filter_var — valida determinada variable dependiendo del filtro usado, sintaxis:
donde:
Ahora veamos algunos ejemplos usando los validate_filters y filter_flags:
- FILTER_VALIDATE_EMAIL: valida la variable como una dirección de correo correcta.
En lugar de la constante podrÃamos usar su ID, ejemplo:
flags: no requiere.
- FILTER_VALIDATE_URL: valida la variable coma una URL correcta (según la sintaxis rfc2396).
http://dominio/imagenes
http://dominio/index.php
2.- FILTER_FLAG_QUERY_REQUIRED requiere de query string en la URL para que sea válida. Es decir, que sea una URL del tipo:
http://misitio/index.php?param1=123¶m2=cadena
- FILTER_VALIDATE_IP: valida la variable como una dirección IP, opcionalmente se puede indicar que sea sólo IPv4 o IPv6 o que no sea de rangos privados o reservados.
flags:
1.- FILTER_FLAG_IPV4 permite direcciones IP solo en formato IPv4.
2.- FILTER_FLAG_IPV6 permite direcciones IP solo en formato IPv6.
3.- FILTER_FLAG_NO_PRIV_RANGE
- falla si se intenta validar alguna de los siguientes rangos privados de IPv4: 10.0.0.0/8, 172.16.0.0/12 y 192.168.0.0/16.
- falla si se intenta validar direcciones IPv6 que empiecen por FD o FC.
4.- FILTER_FLAG_NO_RES_RANGE falla si se intenta validar alguno de los siguientes rangos IPv4 reservados: 0.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24 y 224.0.0.0/4. Este flag no se aplica a direcciones IPv6.
- FILTER_VALIDATE_REGEXP valida la variable contra una expresión regular pasada como tercer parámetro de filter_var.
flags: no requiere.
- FILTER_VALIDATE_INT valida la variable como un número entero.
opciones:
puede recibir en el tercer parámetro un array indicando el valor mÃnimo y máximo permitido (min_range y max_range), ejemplo:
Como vemos, podemos pasar varias opciones en el tercer parámetro y al mismo tiempo.
2.- FILTER_FLAG_ALLOW_HEX permite datos de entrada que comiencen por 0x o 0X como número hexadecimal. Esto obliga a que los siguientes dÃgitos sean únicamente a-fA-F0-9.
Otro ejemplo:
- FILTER_VALIDATE_BOOLEAN - devuelve TRUE para si el valor de la variable pasada es (1,TRUE,ON,YES) y FALSE en caso contrario.
- FILTER_VALIDATE_FLOAT - valida que el valor sea de tipo float.
filter_has_var — devuelve true si existe una variable de un tipo concreto, sintaxis:
donde tipo puede ser: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV. Ejemplo:
filter_input — es similar a filter_has_var con la diferencia que permite validar esas variables directamente, devuelve la variable filtrada si hubo éxito, FALSE si es incorrecto su valor, o NULL si la variable no está definida.
Su sintaxis:
donde tipo puede ser: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV.
Solo restan las funciones filter que trabajan con array, trabajar con otros filtros, sanear las variables, etc. eso ya será en otra oportunidad.
Para simplificar un poco se hizo uso del operador ternario, puedes echarle una ojeada si lo desconoces y regresar luego con calma a leer el articulo, no olvides que la mejor forma de aprender es leer y probar, ensayo y error.
Referencias:
php.net/filter
Para este articulo nos centraremos en los filtros de validación:
- FILTER_VALIDATE_BOOLEAN - valida la variable como un booleano.
- FILTER_VALIDATE_EMAIL - valida la variable como una dirección de correo electrónico correcta.
- FILTER_VALIDATE_FLOAT - valida que la variable sea del tipo float.
- FILTER_VALIDATE_INT - valida la variable como un número entero.
- FILTER_VALIDATE_IP - valida la variable como una dirección IP.
- FILTER_VALIDATE_REGEXP - valida la variable contra una expresión regular.
- FILTER_VALIDATE_URL - valida el valor coma una URL de acuerdo con la RFC 2396.
- FILTER_VALIDATE_EMAIL - valida la variable como una dirección de correo electrónico correcta.
- FILTER_VALIDATE_FLOAT - valida que la variable sea del tipo float.
- FILTER_VALIDATE_INT - valida la variable como un número entero.
- FILTER_VALIDATE_IP - valida la variable como una dirección IP.
- FILTER_VALIDATE_REGEXP - valida la variable contra una expresión regular.
- FILTER_VALIDATE_URL - valida el valor coma una URL de acuerdo con la RFC 2396.
Lafunción filter_list como su nombre lo indica, nos devuelve una lista con los nombre de filtros:
echo '<pre>'; print_r(filter_list()); echo '</pre>';
devuelve:
Clic aquà para mostrar u ocultar el resultado
Array ( [0] => int // 257 [1] => boolean // 258 [2] => float // 259 [3] => validate_regexp // 272 [4] => validate_url [5] => validate_email // 274 [6] => validate_ip // 275 [7] => string // 513 [8] => stripped // 513 [9] => encoded // 514 [10] => special_chars [11] => full_special_chars // 515 [12] => unsafe_raw // 516 [13] => email // 517 [14] => url // 518 [15] => number_int // 519 [16] => number_float // 520 [17] => magic_quotes // 521 [18] => callback // 1024 )
filter_id devuelve el identificador para un determinado nombre de filtro.
echo filter_id('int');// devuelve 257 echo filter_id('email');// devuelve 517
filter_var — valida determinada variable dependiendo del filtro usado, sintaxis:
filter_var(variable,filtro,opciones)
donde:
variable - valor a filtrar
filtro - ID del filtro a usar, su valor predeterminado es FILTER_SANITIZE_STRING.
opciones - puede ser una constante o un array asociativo, el valor pasado modificarán el funcionamiento del filtro.
filtro - ID del filtro a usar, su valor predeterminado es FILTER_SANITIZE_STRING.
opciones - puede ser una constante o un array asociativo, el valor pasado modificarán el funcionamiento del filtro.
Ahora veamos algunos ejemplos usando los validate_filters y filter_flags:
Clic aquà para mostrar u ocultar los ejemplos
- FILTER_VALIDATE_EMAIL: valida la variable como una dirección de correo correcta.
// validamos una dirección de correo echo filter_var('ID@gmail.com',FILTER_VALIDATE_EMAIL) ? 'Email correcto' : 'Email Incorrecto'; // devuelve: Email correcto // valida que la dirección tenga el formato [cadena]@[cadena].[cadena] // devolverÃa true pasándole la cadena de caracteres: a@b.c
En lugar de la constante podrÃamos usar su ID, ejemplo:
// 274 -FILTER_VALIDATE_EMAIL echo filter_var('ID@gmail.com',274) ? 'Email correcto' : 'Email Incorrecto'; // devuelve: Email correcto
flags: no requiere.
- FILTER_VALIDATE_URL: valida la variable coma una URL correcta (según la sintaxis rfc2396).
// validamos una URL echo filter_var('http://cassianet.blogspot.com', FILTER_VALIDATE_URL) ? 'URL válida' : 'URL invalida'; // devuelve: URL válida echo filter_var('google.com', FILTER_VALIDATE_URL) ? 'URL válida' : 'URL invalida'; // devuelve: URL invalida
flags:
1.- FILTER_FLAG_PATH_REQUIRED permite indicar que el dominio debe tener una barra invertida / seguida de alguna cadena de caracteres, ejemplo:http://dominio/imagenes
http://dominio/index.php
echo filter_var('http://mi-sitio.com/imagenes', FILTER_VALIDATE_URL,FILTER_FLAG_PATH_REQUIRED) ? 'URL válida' : 'URL invalida'; // devuelve: URL válida
2.- FILTER_FLAG_QUERY_REQUIRED requiere de query string en la URL para que sea válida. Es decir, que sea una URL del tipo:
http://misitio/index.php?param1=123¶m2=cadena
$sURL = 'http://mi-sitio/index.php?param1=123'; echo filter_var($sURL, FILTER_VALIDATE_URL,FILTER_FLAG_QUERY_REQUIRED) ? 'URL válida' : 'URL invalida'; // devuelve: URL válida
- FILTER_VALIDATE_IP: valida la variable como una dirección IP, opcionalmente se puede indicar que sea sólo IPv4 o IPv6 o que no sea de rangos privados o reservados.
echo filter_var('192.168.1.1', FILTER_VALIDATE_IP) ? 'IP válida' : 'IP invalida'; // devuelve: IP válida echo filter_var('192.168.1', FILTER_VALIDATE_IP) ? 'IP válida' : 'IP invalida'; // devuelve: IP invalida
flags:
1.- FILTER_FLAG_IPV4 permite direcciones IP solo en formato IPv4.
echo filter_var('192.168.1.1', FILTER_VALIDATE_IP,FILTER_FLAG_IPV4) ? 'IP válida' : 'IP invalida'; // devuelve: IP válida
2.- FILTER_FLAG_IPV6 permite direcciones IP solo en formato IPv6.
echo filter_var('192.168.1.1', FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) ? 'IP válida' : 'IP invalida'; // devuelve: IP invalida
3.- FILTER_FLAG_NO_PRIV_RANGE
- falla si se intenta validar alguna de los siguientes rangos privados de IPv4: 10.0.0.0/8, 172.16.0.0/12 y 192.168.0.0/16.
- falla si se intenta validar direcciones IPv6 que empiecen por FD o FC.
4.- FILTER_FLAG_NO_RES_RANGE falla si se intenta validar alguno de los siguientes rangos IPv4 reservados: 0.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24 y 224.0.0.0/4. Este flag no se aplica a direcciones IPv6.
- FILTER_VALIDATE_REGEXP valida la variable contra una expresión regular pasada como tercer parámetro de filter_var.
$sCadena = 'letras123'; echo filter_var($sCadena, FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => "/^[a-zA-Z]+$/"))) ? 'El valor es correcto' : 'El valor es incorrecto'; // devuelve: El valor es incorrecto echo filter_var($sCadena, FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => "/^[a-zA-Z0-9]+$/"))) ? 'El valor es correcto' : 'El valor es incorrecto'; // devuelve: El valor es correcto
flags: no requiere.
- FILTER_VALIDATE_INT valida la variable como un número entero.
$Num = 2011; echo filter_var($Num, FILTER_VALIDATE_INT) ? "$Num es de tipo entero" : "$Num NO es de tipo entero"; // devuelve: Es de tipo entero
opciones:
puede recibir en el tercer parámetro un array indicando el valor mÃnimo y máximo permitido (min_range y max_range), ejemplo:
$Num = 1000; echo filter_var($Num, FILTER_VALIDATE_INT, array("options"=> array("min_range"=>0, "max_range"=>256))) ? "$Num está dentro del rango" : "$Num NO está dentro del rango"; // devuelve: No está dentro del rango
Como vemos, podemos pasar varias opciones en el tercer parámetro y al mismo tiempo.
flags:
1.- FILTER_FLAG_ALLOW_OCTAL permite datos de entrada que comiencen por un cero (0) como número octal. Esto obliga a que los siguientes dÃgitos sean únicamente 0-7.//74=1,001,010=112 echo filter_var(0112, FILTER_VALIDATE_INT,FILTER_FLAG_ALLOW_OCTAL) ? 'valor correcto' : 'valor incorrecto'; // devuelve: valor correcto
2.- FILTER_FLAG_ALLOW_HEX permite datos de entrada que comiencen por 0x o 0X como número hexadecimal. Esto obliga a que los siguientes dÃgitos sean únicamente a-fA-F0-9.
echo filter_var('0xf0', FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX) ? 'valor correcto' : 'valor incorrecto'; // devuelve: valor correcto echo filter_var('0f0', FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX) ? 'valor correcto' : 'valor incorrecto'; // devuelve: valor incorrecto
Otro ejemplo:
echo filter_var('0xf1',FILTER_VALIDATE_INT, // opciones array( 'flags' => FILTER_FLAG_ALLOW_HEX, 'options' => array('min_range' => 1, 'max_range' => 0xf0) ) ) ? 'valor correcto' : 'valor incorrecto'; // devuelve: valor incorrecto, por salirse del rango
- FILTER_VALIDATE_BOOLEAN - devuelve TRUE para si el valor de la variable pasada es (1,TRUE,ON,YES) y FALSE en caso contrario.
echo filter_var('ON', FILTER_VALIDATE_BOOLEAN) ? 'valor correcto' : 'valor incorrecto'; // devuelve: valor correcto echo filter_var(10010, FILTER_VALIDATE_BOOLEAN) ? 'valor correcto' : 'valor incorrecto'; // devuelve: valor incorrecto
flags:
1.- FILTER_NULL_ON_FAILURE retorna NULL para valores boolean que no se reconozcan. - FILTER_VALIDATE_FLOAT - valida que el valor sea de tipo float.
echo filter_var(8.5, FILTER_VALIDATE_FLOAT) ? 'Es de tipo float' : 'NO es de tipo float';// devuelve: Es de tipo float echo filter_var('111,109.40', FILTER_VALIDATE_FLOAT) ? 'Es de tipo float' : 'NO es de tipo float';// devuelve: NO es de tipo float
flags:
1.- FILTER_FLAG_ALLOW_THOUSAND permite usar una coma (,) como separador de miles en los números. También puede ser usado con los filtros FILTER_SANITIZE_NUMBER_FLOAT, FILTER_VALIDATE_FLOAT.echo filter_var('111,109.40', FILTER_VALIDATE_FLOAT,FILTER_FLAG_ALLOW_THOUSAND) ? 'Es de tipo float' : 'NO es de tipo float';// devuelve: Es de tipo float
filter_has_var — devuelve true si existe una variable de un tipo concreto, sintaxis:
filter_has_var(tipo,nombre_variable)
donde tipo puede ser: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV. Ejemplo:
// devolvera el valor del parametro si existe ?param1=valor echo filter_has_var(INPUT_GET, 'param1') ? 'el parámetro existe - param1= '.$_GET['param1'] : 'el parámetro No existe';
filter_input — es similar a filter_has_var con la diferencia que permite validar esas variables directamente, devuelve la variable filtrada si hubo éxito, FALSE si es incorrecto su valor, o NULL si la variable no está definida.
Su sintaxis:
filter_input(tipo,nombre_variable,filtro,opciones)
donde tipo puede ser: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV.
echo filter_input(INPUT_GET, 'param1', FILTER_VALIDATE_BOOLEAN) ? 'correcto' : 'incorrecto'; echo filter_input(INPUT_GET, 'param2', FILTER_VALIDATE_BOOLEAN) ? 'correcto' : 'incorrecto'; echo filter_input(INPUT_GET, 'param3', FILTER_VALIDATE_BOOLEAN) ? 'correcto' : 'incorrecto'; echo filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL) ? 'Email correcto' : 'Email incorrecto';
Solo restan las funciones filter que trabajan con array, trabajar con otros filtros, sanear las variables, etc. eso ya será en otra oportunidad.
Para simplificar un poco se hizo uso del operador ternario, puedes echarle una ojeada si lo desconoces y regresar luego con calma a leer el articulo, no olvides que la mejor forma de aprender es leer y probar, ensayo y error.
Referencias:
php.net/filter
- Los comentarios están siendo moderados y serán publicados en la brevedad posible.