Tenemos la posibilidad de validar cadenas con php (desde emails, urls, textos, ips, etc.) con el uso de unos filtros ya definidos. Validar cadenas con php como ya sabemos nos pueden ayudar en muchas ocasiones y que mejor si ya existen filtros que toman en cuenta cosas que a lo mejor ni sabíamos sobre ciertos tipos de datos.
Para validar cadenas con php se utiliza la función filter_var(); y acepta (dependiendo del tipo de dato), dos a más parámetros.
- El primero, la cadena a validar
- El segundo, la id del filtro para el tipo de dato. Aquí podéis ver los tipos de ids de los filtros para validar.
- Los demás parámetros depende del tipo de dato, pero son para ir restringiendo el dato.
La ventaja de que el segundo parámetro sea una id de un filtro para validar, es que tambien se puede poner una id para sanear (arreglar) la cadena a evaluar. Es ahí donde se toman en cuenta muchas cosas que a uno a lo mejor ni se le acurria para validar algo.
Aquí podeis ver las ids de los filtros para sanear.
Validar cadenas de tipo email
Un email tiene la característica de contar con un arroba (@) y un punto y algo (.com por ejemplo), y que además no contenga caracteres raros con ¿, ~, €, etc.
<?php
$cadena = "[email protected]";
if(filter_var( $cadena, FILTER_VALIDATE_EMAIL )){
echo "El email es correcto";
}else{
echo "El email es incorrecto";
}
?>
La id FILTER_VALIDATE_EMAIL valida datos de tipo email, por lo que la función te dirá si es correcto o es falso. Pero como dije que existía la posibilidad de arreglar la cadena (por si el se equivoco al presionar una tecla de más o algo parecido), para eso esta FILTER_SANITIZE_EMAIL.
<?php $cadena = "jama@ tutoriales|enlinea.es"; if(filter_var( $cadena, FILTER_SANITIZE_EMAIL )){ echo "El email es correcto"; }else{ echo "El email es incorrecto"; } ?>
Validar cadenas de tipo url
Para validar cadenas de tipo url la id es FILTER_VALIDATE_URL, y pasa casi lo mismo, con que no existan los prefijos https:// y el www. esto estará incorrecto.
<?php
$cadena = "https://tutorialesenlinea.futbolgratis.org";
if(filter_var( $cadena, FILTER_VALIDATE_URL )){
echo "La url es correcto";
}else{
echo "La url es incorrecto";
}
?>
Igual que con el email, para eliminar caracteres raros, se usa el FILTER_SANITIZE_URL.
Para pedir que no solo sea la url del sitio raiz, si no que exista una ruta como minimo, le podemos añadir otra id que es FILTER_FLAG_PATH_REQUIRED.
<?php
$cadena = "https://tutorialesenlinea.futbolgratis.org/blog";
if(filter_var( $cadena, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED )){
echo "La url es correcto";
}else{
echo "La url es incorrecto";
}
?>
Ahora que si queremos que exista una petición en la url, en vez de la anterior escribimos FILTER_FLAG_QUERY_REQUIRED.
<?php
$cadena = "https://tutorialesenlinea.futbolgratis.org/blog.php?nombre=jama";
if(filter_var( $cadena, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED )){
echo "La url es correcto";
}else{
echo "La url es incorrecto";
}
?>
En fin, existen muchos filtros para validar cadenas de muchas cosas con filter_var
filter_var
(PHP 5 >= 5.2.0, PHP 7)
filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] ) : mixed
Parámetros
variable
Valor a filtrar
filter
El ID del filtro a aplicar. La página Tipos de filtros del manual enumera los filtros disponibles. Si se omite, se utilizará FILTER_DEFAULT, que es equivalente a FILTER_UNSAFE_RAW. Esto resultará en que no se realice ningún tipo de filtro de forma predeterminada.
options
Array asociativo de opciones o disyunción lógica de flags. Si un filtro acepta opciones, se pueden indicar flags en el campo "flags" del array. Para el filtro "callback" debería pasarse el tipo callable. La llamada de la función de retorno (callback) debe aceptar un argumento, el valor a ser filtrado y debe retornar el valor tras su filtrado/saneamiento.
<?php
// Para filtros que acepten opciones, usar este formato
$opciones = array(
'options' => array(
'default' => 3, // valor a retornar si el filtro falla
// más opciones aquí
'min_range' => 0
),
'flags' => FILTER_FLAG_ALLOW_OCTAL,
);
$var = filter_var('0755', FILTER_VALIDATE_INT, $opciones);
// Para filtros que únicamente acepten flags, se pueden pasar directametne
$var = filter_var('oops', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
// Para filtros que únicamente acepten flags, también pueden pasarse como
// array
$var = filter_var('oops', FILTER_VALIDATE_BOOLEAN,
array('flags' => FILTER_NULL_ON_FAILURE));
// Filtro "callback2
function foo($value)
{
// Formato esperado: Apellido, Nombre
if (strpos($value, ", ") === false) return false;
list($surname, $givennames) = explode(", ", $value, 2);
$empty = (empty($surname) || empty($givennames));
$notstrings = (!is_string($surname) || !is_string($givennames));
if ($empty || $notstrings) {
return false;
} else {
return $value;
}
}
$var = filter_var('Doe, Jane Sue', FILTER_CALLBACK, array('options' => 'foo'));
?>
Valores devueltos
Retorna los datos filtrados o FALSE si el filtro falla.
Ejemplos
Ejemplo #1 Un ejemplo de filter_var()
<?php
var_dump(filter_var('[email protected]', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));
?>
El resultado del ejemplo sería:string(15) "[email protected]"
bool(false)
Comentarios