PHP filter_var(): 6 ejemplos de código abierto de validación con filtros

  • Publicado el 05 septiembre, 2024
  • Palabras: 772

Una de las funciones PHP menos conocidas es filter_var(), que busca patrones de cadenas como correo electrónico, URL, dirección IP y más. En esta publicación, vamos a ver cinco ejemplos prácticos de filter_var() de proyectos de código abierto.

PHP filter_var(): 6 ejemplos de código abierto de validación con filtros

La sintaxis general típica de filter_var() es la siguiente:

 

if (filter_var($value, FILTER_VALIDATE_EMAIL)) {
    // ... means $value is a valid email
}

 

El segundo parámetro es uno de los posibles valores de filtro:

 

  • FILTER_VALIDATE_BOOLEAN
  • FILTER_VALIDATE_DOMAIN
  • FILTER_VALIDATE_EMAIL
  • FILTER_VALIDATE_FLOAT
  • FILTER_VALIDATE_INT
  • FILTER_VALIDATE_IP
  • FILTER_VALIDATE_MAC
  • FILTER_VALIDATE_REGEXP
  • FILTER_VALIDATE_URL

 

Ahora, veamos los más populares en acción:

 

# FILTER_VALIDATE_EMAIL

 

El primer ejemplo es de un proyecto de código abierto krayin/laravel-crm donde se utiliza filter_var() para validar una dirección de correo electrónico utilizando el filtro FILTER_VALIDATE_EMAIL.

 

public function parseEmailAddress($type)
{
    $emails = [];
 
    $addresses = mailparse_rfc822_parse_addresses($this->emailParser->getHeader($type));
 
    if (count($addresses) > 1) {
        foreach ($addresses as $address) {
            if (filter_var($address['address'], FILTER_VALIDATE_EMAIL)) { 
                $emails[] = $address['address'];
            }
        }
    } else if ($addresses) {
        $emails[] = $addresses[0]['address'];
    }
 
    return $emails;
}

 

# FILTER_SANITIZE_NUMBER_INT & FILTER_SANITIZE_NUMBER_FLOAT

 

En el proyecto de código abierto koel/koel, la función filter_var() se utiliza para filtrar números.

 

El filtro FILTER_SANITIZE_NUMBER_INT se utiliza para números enteros y el filtro FILTER_SANITIZE_NUMBER_FLOAT, como lo indica el nombre del filtro, para números de punto flotante.

 

Ambos filtros pueden tener opcionalmente un rango especificado.

 

public function stream(Song $song, array $config = []): void
{
    // ...
 
    $bitRate = filter_var(Arr::get($config, 'bit_rate'), FILTER_SANITIZE_NUMBER_INT)
        ?: config('koel.streaming.bitrate');
 
    $startTime = filter_var(Arr::get($config, 'start_time', 0), FILTER_SANITIZE_NUMBER_FLOAT);
 
    // ...
}

 

# FILTER_VALIDATE_BOOLEAN

 

¿Sabías que puedes comprobar si un valor es booleano utilizando la función filter_var()? En koel/koel, así es exactamente como se utiliza FILTER_VALIDATE_BOOLEAN.

 

public function set(string $key, mixed $value): self
{
    $cast = self::CASTS[$key] ?? null;
 
    $value = match ($cast) {
        'boolean' => filter_var($value, FILTER_VALIDATE_BOOLEAN), 
        'integer' => (int) $value,
        'float' => (float) $value,
        default => $value,
    };
 
    // ...
}

 

# FILTER_VALIDATE_IP

 

El filtro filter_var() tiene un excelente filtro para direcciones IP. Este filtro se utiliza en el proyecto de código abierto pterodactyl/panel.

 

Además, existen opciones para filtrar solo IPv4 o IPv6 o no filtrar rangos privados o reservados.

 

public function passes($attribute, $value): bool
{
    if (filter_var($value, FILTER_VALIDATE_IP)) { 
        if ($this->schemeField && Arr::get($this->data, $this->schemeField) === 'https') {
            $this->message = 'The :attribute must not be an IP address when HTTPS is enabled.';
 
            return false;
        }
 
        return true;
    }
 
    $records = @dns_get_record($value, DNS_A + DNS_AAAA);
    if (!empty($records) || filter_var(gethostbyname($value), FILTER_VALIDATE_IP)) {
        return true;
    }
 
    $this->message = 'The :attribute could not be resolved to a valid IP address.';
 
    return false;
}

 

# FILTER_VALIDATE_URL

 

Al utilizar la función filter_var() con el filtro FILTER_VALIDATE_URL, es sencillo comprobar si la variable es una URL válida.

 

class ValidationServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // ...
 
        Validator::extend('relative_or_secure_url', function ($attribute, $value, $parameters) {
            return Str::startsWith($value, '/') || filter_var($value, FILTER_VALIDATE_URL) !== false && Str::startsWith($value, 'https'); 
        }, 'The :attribute should be a valid url (relative or https)');
 
        // ...
    }

 

# FILTER_VALIDATE_DOMAIN

 

Puede validar el nombre de dominio con el filtro FILTER_VALIDATE_DOMAIN para la función filter_var().

 

Además, se pasa la opción FILTER_FLAG_HOSTNAME, que exige que los nombres de host comiencen con un carácter alfanumérico y contengan solo caracteres alfanuméricos o guiones.

 

public static function hasValidDns($domain)
{
    // ...
 
    $valid = filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME); 
 
    if (! $valid) {
        return false;
    }
 
    return Cache::remember(self::CACHE_KEY.'valid-dns:'.$domain, 1800, function () use ($domain) {
        return count(dns_get_record($domain, DNS_A | DNS_AAAA)) > 0;
    });
}

 

 

Antonio Jenaro

Antonio Jenaro

Web Developer

Archivado en:

Fuente: Laravel Daily

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión