El club de ajedrez recibe una edad rara
Tu instituto abre una web para apuntarse al club de ajedrez. Alguien escribe "abc" en la edad. Otra persona deja el nombre vacío.
Si el servidor lo guarda todo sin mirar, tendrás una lista llena de basura.
Hoy aprendes a validar: comprobar cada dato antes de usarlo.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Validar | Comprobar que un dato tiene la forma correcta antes de usarlo. | La edad es un número |
| Limpiar | Arreglar un dato sin cambiar lo que significa, como quitar espacios. | trim($name) |
| filter_var | Una función de PHP que comprueba si un dato es un correo, un número y más. | filter_var($email, FILTER_VALIDATE_EMAIL) |
| Lista permitida | Los únicos valores que aceptas. Todo lo demás se rechaza. | ["bajo", "medio", "alto"] |
| Rango | Los valores entre un mínimo y un máximo. | de 14 a 99 |
| Mensaje de error | La frase que explica al visitante qué ha hecho mal. | Escribe tu nombre. |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Tres preguntas para cada dato
Antes de usar un dato, hazle tres preguntas.
- ¿Existe? A lo mejor no ha llegado, o está vacío.
- ¿Tiene la forma correcta? Un correo lleva una arroba. Una edad es un número.
- ¿Está dentro del límite? Una edad de 300 años no es real.
Si falla una pregunta, no sigues. Avisas con un mensaje.
Pruébalo: comprobar un correo
<?php
// Comprobamos tres direcciones de correo.
$emails = ["[email protected]", "ana@", "ana correo.es"];
foreach ($emails as $email) {
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo $email . " -> no válido\n";
} else {
echo $email . " -> válido\n";
}
}
filter_var hace el trabajo difícil
Comprobar un correo a mano es muy complicado. Por eso PHP trae filter_var.
Le das el dato y qué quieres comprobar. Si el dato vale, te lo devuelve. Si no vale, devuelve false.
Compara con === false, con tres signos igual. Así un número 0 válido no se confunde con un fallo.
Pruébalo: una edad entre 14 y 99
<?php
// La edad tiene que ser un número entero entre 14 y 99.
$options = ["options" => ["min_range" => 14, "max_range" => 99]];
$texts = ["17", "13", "abc", "17.5"];
foreach ($texts as $text) {
$age = filter_var($text, FILTER_VALIDATE_INT, $options);
if ($age === false) {
echo $text . " -> no vale\n";
} else {
echo $text . " -> edad " . $age . "\n";
}
}
Ejemplo resuelto: qué pasa con cada edad
| Lo que escribe | ¿Vale? | Por qué |
|---|---|---|
| 17 | Sí | Es un número entero entre 14 y 99. |
| 13 | No | Es menor que 14. |
| 100 | No | Es mayor que 99. |
| abc | No | No es un número. |
| 17.5 | No | Tiene decimales, no es entero. |
| (vacío) | No | No hay ningún dato. |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Repaso rápido: validar
Inténtalo
Repaso rápido: validar
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.
Limpiar no es validar
Limpiar es arreglar un dato sin cambiar lo que dice. Por ejemplo, trim quita los espacios de los lados.
Validar es decidir si el dato vale o no.
Primero limpia y después valida. Un nombre con solo espacios se queda vacío al limpiarlo, y entonces lo rechazas.