Clases de Caracteres, Rangos ([a-z]) y Clases Abreviadas (\d, \w, \s)
Define conjuntos de caracteres válidos con corchetes [...], rangos alfanuméricos, negación [^...] y atajos esenciales (\d dígitos, \w alfanumérico, \s espacios).
¿Qué es una Clase de Caracteres [...]?
Una clase de caracteres (también llamada conjunto de caracteres) se define envolviendo una lista de caracteres entre corchetes [...]. Le indica al motor PCRE que coincida con exactamente un único carácter de entre todos los permitidos dentro del conjunto.
Por ejemplo, el patrón /c[ao]sa/ coincidirá con "casa" o con "cosa", pero nunca con "cesa" ni con "caosa".
Rangos Alfanuméricos y Negación
Para evitar tener que escribir todos los caracteres uno por uno, el guion - dentro de los corchetes define un rango según la tabla ASCII:
[a-z]: Cualquier letra minúscula del alfabeto inglés (a la z).[A-Z]: Cualquier letra mayúscula (A la Z).[0-9]: Cualquier dígito del 0 al 9.[a-zA-Z0-9_-]: Cualquier carácter alfanumérico más guion y guion bajo.
La Negación con ^ (Caret)
Cuando el símbolo ^ se coloca inmediatamente después del corchete de apertura (ej: [^abc]), invierte el significado: coincide con cualquier carácter que NO esté en la lista.
// Coincide con cualquier carácter excepto dígitos numéricos:
$patron = '/[^0-9]/';
Clases Abreviadas Predefinidas (Shorthands)
PCRE proporciona atajos sumamente comunes para las clases más utilizadas en el desarrollo backend:
| Atajo | Equivalente Manual | Descripción | Negación Inversa |
|---|---|---|---|
\d |
[0-9] |
Cualquier dígito numérico (0-9). | \D : Cualquier carácter que no sea dígito. |
\w |
[a-zA-Z0-9_] |
Carácter de palabra (letras, números y guion bajo). | \W : Carácter que no es de palabra (puntuación, espacios). |
\s |
[ \t\r\n\f] |
Cualquier tipo de espacio en blanco (espacio, tabulador, salto de línea). | \S : Cualquier carácter que no sea espacio en blanco. |
⚡ Validador de Nombres de Usuario con Clases y Shorthands
Ejemplo interactivo. Validamos que los nombres de usuario solo contengan caracteres alfanuméricos y guiones bajos (3 a 16 caracteres), usando clases y \w:
<?php
// Regla: 3 a 16 caracteres, solo letras, números y guion bajo (\w)
// Iniciando con letra obligatoria [a-zA-Z]
$patronUsername = '/^[a-zA-Z]\w{2,15}$/';
$pruebas = [
'carlos_dev', // Válido (10 caracteres, letras y guion bajo)
'valeria2026', // Válido (11 caracteres)
'a_b', // Válido (3 caracteres exactos)
'99problemas', // Inválido (no inicia con letra)
'juan perez', // Inválido (contiene espacio)
'super_califragilistico_espialidoso', // Inválido (supera 16 caracteres)
'dev@kilopolis', // Inválido (contiene arroba)
];
echo "<div style='font-family:system-ui; max-width:620px; padding:15px;'>";
echo "<h3 style='color:#0f172a; margin-top:0;'>👤 Validador de Usernames con \\w</h3>";
echo "<p style='color:#64748b; font-size:13px;'>Patrón: <code>^[a-zA-Z]\\w{2,15}$</code> (inicia con letra + caracteres de palabra)</p>";
foreach ($pruebas as $username) {
$esValido = preg_match($patronUsername, $username) === 1;
$colorFondo = $esValido ? '#ecfdf5' : '#fef2f2';
$colorBorde = $esValido ? '#10b981' : '#ef4444';
$icono = $esValido ? '✅' : '❌';
$mensaje = $esValido ? 'NOMBRE VÁLIDO' : 'RECHAZADO POR POLÍTICA';
echo "<div style='display:flex; justify-content:space-between; align-items:center; background:$colorFondo; border:1px solid $colorBorde; border-radius:6px; padding:10px 14px; margin-bottom:8px;'>";
echo " <div>";
echo " <strong style='font-family:monospace; font-size:15px; color:#1e293b;'>$username</strong>";
echo " <span style='color:#64748b; font-size:12px; margin-left:8px;'>(" . strlen($username) . " chars)</span>";
echo " </div>";
echo " <span style='color:$colorBorde; font-weight:bold; font-size:12px;'>$icono $mensaje</span>";
echo "</div>";
}
echo "</div>";
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección¿Cuál es la diferencia exacta entre el atajo "\w" y la clase negada "[^0-9]"?
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar Regex en PHP: Expresiones Regulares & PCRE y crear proyectos reales?
Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.
🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.