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 = / ^ h t t p s ? : \/ \/ ( w w w \. ) ? [ \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