1+ import re
2+
3+ """
4+ /*
5+ * EJERCICIO:
6+ * Utilizando tu lenguaje, explora el concepto de expresiones regulares,
7+ * creando una que sea capaz de encontrar y extraer todos los números
8+ * de un texto.
9+ """
10+
11+ txt = """
12+ Cristiano Ronaldo dos Santos Aveiro (Funchal, Madeira, 5 de febrero de 1985)
13+ es un futbolista portugués. Juega como delantero y su equipo actual es el
14+ Al-Nassr F. C. de la Liga Profesional Saudí. Es internacional absoluto con la
15+ selección de Portugal, de la cual es capitán, máximo goleador histórico y
16+ jugador con más presencias con 217 partidos, logro alcanzado en las eliminatorias
17+ para la Eurocopa 2024, reconocido por el Libro Guinness de los récords.
18+ """
19+
20+ regex_pattern = r"\d+"
21+
22+ matches = re .findall (regex_pattern , txt )
23+ print (matches )
24+
25+ """
26+ * DIFICULTAD EXTRA (opcional):
27+ * Crea 3 expresiones regulares (a tu criterio) capaces de:
28+ * - Validar un email.
29+ * - Validar un número de teléfono.
30+ * - Validar una url.
31+ */
32+ """
33+
34+ # Validando un e-mail
35+
36+ def email_validation (email ):
37+
38+ reg_pattern = r"^[a-zA-Z0-9]+([.+-_][a-zA-Z0-9]+)*@([a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$"
39+
40+ # Verificamos si toda la cadena coincide con el patron
41+
42+ return True if re .fullmatch (reg_pattern , email ) else False
43+
44+
45+ emails = [
46+ "usuario@example.com" ,
47+ "user.name@sub.domain.org" ,
48+ "correo@dominio.co" ,
49+ "usuario123@dominio.com" ,
50+ "mal.correo@com" , # Inválido (extensión incorrecta)
51+ "sin-arroba.com" , # Inválido (falta @)
52+ "@sin_nombre.com" # Inválido (falta nombre)
53+ ]
54+
55+ for email in emails :
56+ print (f"{ email } : { "Valido" if email_validation (email ) else "Invalido" } " )
57+
58+ # Validando un número de telefono en Colombia.
59+ # Formato 300-000-0000, debe tener 10 digitos
60+
61+ def phone_validation (phone ):
62+
63+ reg_pattern = r'^([3][0-9]{2}-?[0-9]{3}-?[0-9]{4})'
64+ return True if re .fullmatch (reg_pattern , phone ) else False
65+
66+
67+ print (phone_validation ("320-326-7902" )) # True
68+ print (phone_validation ("320-326-790235" )) # False
69+ print (phone_validation ("3203267902" )) # True
70+ print (phone_validation ("2203267902" )) # False
71+
72+
73+
74+ # Validando una URL
75+ def url_validate (url :str ) -> bool :
76+
77+ pattern = (
78+ r'^(https?://)' # Protocolo
79+ r'([a-zA-Z0-9-]+\.)*' # Subdominios
80+ r'[a-zA-Z]{2,}' # TLD ej. (.com , .org)
81+ r'(:[0-9]{1,5})?' # Puerto (opcional) ej. :8000
82+ r'(/.*)?$'
83+ )
84+ # reg_pattern = r'^(https?://)?(www\.)?([a-zA-Z0-9.-]+)\.[a-zA-Z]{2,6}(/.*)?$'
85+
86+ return True if re .fullmatch (pattern , url ) else False
87+
88+
89+ urls = [
90+ "https://www.google.com" , # Válido
91+ "http://example.org" , # Válido
92+ "https://sub.dominio.co/path?query=123" , # Válido
93+ "ftp://invalid.com" , # Inválido (no es HTTP o HTTPS)
94+ "www.nodominio" , # Inválido (falta extensión)
95+ "http://localhost:8000" , # Valido
96+ ]
97+
98+
99+ print ("\n Validación de URLs:" )
100+ for url in urls :
101+ print (f"{ url } : { 'Válido' if url_validate (url ) else 'Inválido' } " )
0 commit comments