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