Skip to content

Commit 0ccde63

Browse files
authored
Merge pull request #2921 from blackriper/main
Reto#16-swift
2 parents 3cc7259 + 81e5e80 commit 0ccde63

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import Foundation
2+
3+
/* las expresiones regulares son patterns que nos permiten extraer informacion de una cadena de texto
4+
en swift se puede evaluar la expresion regular con NSRegularExpression o con un metodo de String llamado
5+
range para crear el regex se utiliza la clase Regex para mas informacion ver:
6+
7+
https://developer.apple.com/documentation/foundation/nsregularexpression
8+
https://www.advancedswift.com/regular-expressions/
9+
10+
para este ejercicio solo vamos a usar el metodo range
11+
*/
12+
13+
14+
func examplePattern() {
15+
let exampleText = """
16+
El manga Hokuto no ken cuenta con 245 capítulos, publicados en la revista semanal Shōnen Jump,
17+
desde el número 41 de 1983 hasta el número 35 de 1988. Luego fue recopilado en 27 volúmenes
18+
por Shueisha. Se está publicando en 14 Kanzenban por Shōgakukan y una Master Edition de 27 volúmenes
19+
por Coamix.
20+
"""
21+
22+
do {
23+
let pattern = try Regex("[0-9]")
24+
print(exampleText.ranges(of: pattern).map { String(exampleText[$0]) })
25+
} catch {
26+
print(error)
27+
}
28+
29+
}
30+
31+
examplePattern()
32+
33+
// ejercicio extra
34+
35+
enum ValidData {
36+
case url
37+
case email
38+
case phone
39+
}
40+
41+
// para mas informacion de los patters te invito a ver mi solucion en kotlin
42+
func validateData(_ data: String, type: ValidData) throws -> Bool {
43+
44+
let regEx = switch type {
45+
case .url:
46+
"^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"
47+
48+
case .email:
49+
"^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$"
50+
51+
case .phone:
52+
#"^\(?\d{3}\)?[ -]?\d{3}[ -]?\d{4}$"#
53+
}
54+
55+
let result = data.range(of: regEx, options: .regularExpression)
56+
return (result != nil)
57+
}
58+
59+
do {
60+
let validUrl = try validateData("https://google.com", type: .url)
61+
print(validUrl)
62+
63+
let validEmail = try validateData("XG7p7@example.com", type: .email)
64+
print(validEmail)
65+
66+
let validPhone = try validateData("411-153-1223", type: .phone)
67+
print(validPhone)
68+
69+
} catch {
70+
print(error)
71+
}

0 commit comments

Comments
 (0)