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. 575y13


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  181o2e


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 = "jama@tutorialesenlinea.futbolgratis.org";
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"; } ?>
Esto nos dará que el email es correcto porque en realidad al final se capturó jama@tutorialesenlinea.futbolgratis.org y no ja€ma@tutoriales|enlinea.es

 

Validar cadenas de tipo url  6i5t4l


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 6q5b3s


(PHP 5 >= 5.2.0, PHP 7)

filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] ) : mixed

Parámetros 2r3i62

variable 1p3z5m


Valor a filtrar

filter 4w563a


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 5a70m


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 2n6h6f


Retorna los datos filtrados o FALSE si el filtro falla.

Ejemplos 1o4a3n


Ejemplo #1 Un ejemplo de filter_var()

<?php
var_dump(filter_var('bob@example.com', 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) "bob@example.com"
bool(false)
Compartir

Mi nombre es Alexander fundador y CEO, y me gusta llamarme un Geek. Amo la informática, tecnología y todo lo que está relacionado con ella. Inicié este sitio con la intención de compartir conocimientos como cursos en línea, tutoriales y videotutoriales. Estoy muy entusiasmado con la información que he descubierto y compartido hasta el momento. La verdad es que lo he hecho con el mayor de los gustos. Así es, soy un Geek con una visión para compartir conocimiento. Leer mas...