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.
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
Web Developer
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