Skip to content

Commit ed78861

Browse files
committed
#16 - typescript
1 parent a60a1ac commit ed78861

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
/**
2+
* Ejercicio de Expresiones Regulares en TypeScript
3+
*
4+
* Este script demuestra el uso de expresiones regulares para:
5+
* 1. Extraer números de un texto
6+
* 2. Validar direcciones de email
7+
* 3. Validar números de teléfono
8+
* 4. Validar URLs
9+
*/
10+
11+
// Texto de ejemplo para probar las expresiones regulares
12+
const textoEjemplo: string = `Hola, tengo 25 años y mi número es 123-456-789.
13+
También puedes contactarme al +34 611 222 333 o por email a [email protected].
14+
Visita mi página web en https://www.ejemplo.com para más información.
15+
Hay 42 razones para usar expresiones regulares y 100 formas de aplicarlas.`;
16+
17+
/**
18+
* Interfaz para los resultados de validación
19+
*/
20+
interface ResultadoValidacion {
21+
valor: string;
22+
esValido: boolean;
23+
}
24+
25+
/**
26+
* 1. Clase para manejar la extracción de números
27+
*/
28+
class ExtractorNumeros {
29+
private static readonly PATRON: RegExp = /\b\d+\b/g;
30+
31+
/**
32+
* Extrae todos los números de un texto dado
33+
* @param texto - El texto del que extraer los números
34+
* @returns Un array con todos los números encontrados
35+
*/
36+
public static extraer(texto: string): string[] {
37+
return texto.match(this.PATRON) || [];
38+
}
39+
}
40+
41+
/**
42+
* 2. Clase para validación de email
43+
*/
44+
class ValidadorEmail {
45+
private static readonly PATRON: RegExp = /^[\w.-]+@[\w.-]+\.\w+$/;
46+
47+
/**
48+
* Valida una dirección de email
49+
* @param email - El email a validar
50+
* @returns Un objeto ResultadoValidacion con el resultado
51+
*/
52+
public static validar(email: string): ResultadoValidacion {
53+
return {
54+
valor: email,
55+
esValido: this.PATRON.test(email)
56+
};
57+
}
58+
}
59+
60+
/**
61+
* 3. Clase para validación de números de teléfono
62+
*/
63+
class ValidadorTelefono {
64+
private static readonly PATRON: RegExp = /^(\+\d{1,3}\s?)?(\d{3}[-\s]?){2}\d{3}$/;
65+
66+
/**
67+
* Valida un número de teléfono
68+
* @param telefono - El número de teléfono a validar
69+
* @returns Un objeto ResultadoValidacion con el resultado
70+
*/
71+
public static validar(telefono: string): ResultadoValidacion {
72+
return {
73+
valor: telefono,
74+
esValido: this.PATRON.test(telefono)
75+
};
76+
}
77+
}
78+
79+
/**
80+
* 4. Clase para validación de URLs
81+
*/
82+
class ValidadorURL {
83+
private static readonly PATRON: RegExp = /^https?:\/\/(www\.)?[\w.-]+\.\w{2,}$/;
84+
85+
/**
86+
* Valida una URL
87+
* @param url - La URL a validar
88+
* @returns Un objeto ResultadoValidacion con el resultado
89+
*/
90+
public static validar(url: string): ResultadoValidacion {
91+
return {
92+
valor: url,
93+
esValido: this.PATRON.test(url)
94+
};
95+
}
96+
}
97+
98+
/**
99+
* Función para imprimir los resultados de validación
100+
*/
101+
function imprimirResultados(titulo: string, resultados: ResultadoValidacion[]): void {
102+
console.log(`\n${titulo}`);
103+
resultados.forEach(({ valor, esValido }) => {
104+
console.log(`${valor} es ${esValido ? 'válido' : 'inválido'}`);
105+
});
106+
}
107+
108+
// Ejecución de pruebas
109+
function ejecutarPruebas(): void {
110+
console.log('=== PRUEBAS DE EXPRESIONES REGULARES ===');
111+
112+
// 1. Extraer números
113+
const numerosEncontrados: string[] = ExtractorNumeros.extraer(textoEjemplo);
114+
console.log('\n1. Números encontrados:');
115+
numerosEncontrados.forEach(numero => console.log(numero));
116+
117+
// 2. Validar emails
118+
const emails: string[] = ['[email protected]', 'email_invalido.com', '[email protected]'];
119+
const resultadosEmail: ResultadoValidacion[] = emails.map(email => ValidadorEmail.validar(email));
120+
imprimirResultados('2. Validación de emails:', resultadosEmail);
121+
122+
// 3. Validar números de teléfono
123+
const telefonos: string[] = ['123-456-789', '+34 611 222 333', '1234', '999-999-999'];
124+
const resultadosTelefono: ResultadoValidacion[] = telefonos.map(tel => ValidadorTelefono.validar(tel));
125+
imprimirResultados('3. Validación de números de teléfono:', resultadosTelefono);
126+
127+
// 4. Validar URLs
128+
const urls: string[] = ['https://www.ejemplo.com', 'http://ejemplo', 'https://dominio.es'];
129+
const resultadosURL: ResultadoValidacion[] = urls.map(url => ValidadorURL.validar(url));
130+
imprimirResultados('4. Validación de URLs:', resultadosURL);
131+
}
132+
133+
// Ejecutar todas las pruebas
134+
ejecutarPruebas();

0 commit comments

Comments
 (0)