1
+ <?php
2
+ /**
3
+ * Ejercicio de Expresiones Regulares en PHP
4
+ *
5
+ * Este script demuestra el uso de expresiones regulares en PHP para:
6
+ * 1. Extraer números de un texto
7
+ * 2. Validar direcciones de email
8
+ * 3. Validar números de teléfono
9
+ * 4. Validar URLs
10
+ */
11
+
12
+ // Texto de ejemplo para probar las expresiones regulares
13
+ $ textoEjemplo = "Hola, tengo 25 años y mi número es 123-456-789. " .
14
+ "Puedes contactarme al +34 611 222 333 o por email a [email protected] . " .
15
+ "Visita mi web https://www.ejemplo.com para más información. " .
16
+ "Hay 42 razones para usar expresiones regulares y 100 formas de aplicarlas. " ;
17
+
18
+ /**
19
+ * 1. Función para encontrar y extraer todos los números de un texto
20
+ *
21
+ * La expresión regular \b\d+\b significa:
22
+ * \b - límite de palabra
23
+ * \d+ - uno o más dígitos
24
+ * \b - otro límite de palabra
25
+ *
26
+ * @param string $texto El texto del que extraer los números
27
+ * @return array Array con todos los números encontrados
28
+ */
29
+ function extraerNumeros ($ texto ) {
30
+ $ patron = '/\b\d+\b/ ' ;
31
+ preg_match_all ($ patron , $ texto , $ coincidencias );
32
+ return $ coincidencias [0 ];
33
+ }
34
+
35
+ /**
36
+ * 2. Función para validar un email
37
+ *
38
+ * La expresión regular verifica:
39
+ * ^ - inicio de la cadena
40
+ * [\w\.-]+ - uno o más caracteres de palabra, puntos o guiones
41
+ * @ - símbolo @
42
+ * [\w\.-]+ - uno o más caracteres de palabra, puntos o guiones
43
+ * \. - un punto literal
44
+ * [\w\.-]+ - dominio de nivel superior
45
+ * $ - fin de la cadena
46
+ *
47
+ * @param string $email El email a validar
48
+ * @return bool true si el email es válido, false si no
49
+ */
50
+ function validarEmail ($ email ) {
51
+ $ patron = '/^[\w\.-]+@[\w\.-]+\.\w+$/ ' ;
52
+ return preg_match ($ patron , $ email ) === 1 ;
53
+ }
54
+
55
+ /**
56
+ * 3. Función para validar un número de teléfono
57
+ *
58
+ * Acepta formatos:
59
+ * - 123-456-789
60
+ * - +34 611 222 333
61
+ *
62
+ * @param string $telefono El número de teléfono a validar
63
+ * @return bool true si el teléfono es válido, false si no
64
+ */
65
+ function validarTelefono ($ telefono ) {
66
+ $ patron = '/^(\+\d{1,3}\s?)?(\d{3}[-\s]?){2}\d{3}$/ ' ;
67
+ return preg_match ($ patron , $ telefono ) === 1 ;
68
+ }
69
+
70
+ /**
71
+ * 4. Función para validar una URL
72
+ *
73
+ * Verifica URLs que:
74
+ * - Comienzan con http:// o https://
75
+ * - Pueden tener www. (opcional)
76
+ * - Tienen un dominio y una extensión válida
77
+ *
78
+ * @param string $url La URL a validar
79
+ * @return bool true si la URL es válida, false si no
80
+ */
81
+ function validarURL ($ url ) {
82
+ $ patron = '/^https?:\/\/(www\.)?[\w\.-]+\.\w{2,}$/ ' ;
83
+ return preg_match ($ patron , $ url ) === 1 ;
84
+ }
85
+
86
+ // PRUEBAS
87
+
88
+ echo "=== PRUEBAS DE EXPRESIONES REGULARES === \n\n" ;
89
+
90
+ // 1. Extraer números
91
+ echo "1. Números encontrados: \n" ;
92
+ $ numeros = extraerNumeros ($ textoEjemplo );
93
+ foreach ($ numeros as $ numero ) {
94
+ echo "- $ numero \n" ;
95
+ }
96
+
97
+ // 2. Validar emails
98
+ echo "\n2. Validación de emails: \n" ;
99
+ $ emails = [
'[email protected] ' ,
'email_invalido.com ' ,
'[email protected] ' ];
100
+ foreach ($ emails as $ email ) {
101
+ $ esValido = validarEmail ($ email ) ? 'válido ' : 'inválido ' ;
102
+ echo "- $ email es $ esValido \n" ;
103
+ }
104
+
105
+ // 3. Validar números de teléfono
106
+ echo "\n3. Validación de números de teléfono: \n" ;
107
+ $ telefonos = ['123-456-789 ' , '+34 611 222 333 ' , '1234 ' , '999-999-999 ' ];
108
+ foreach ($ telefonos as $ telefono ) {
109
+ $ esValido = validarTelefono ($ telefono ) ? 'válido ' : 'inválido ' ;
110
+ echo "- $ telefono es $ esValido \n" ;
111
+ }
112
+
113
+ // 4. Validar URLs
114
+ echo "\n4. Validación de URLs: \n" ;
115
+ $ urls = ['https://www.ejemplo.com ' , 'http://ejemplo ' , 'https://dominio.es ' ];
116
+ foreach ($ urls as $ url ) {
117
+ $ esValido = validarURL ($ url ) ? 'válida ' : 'inválida ' ;
118
+ echo "- $ url es $ esValido \n" ;
119
+ }
120
+
121
+ ?>
0 commit comments