|
| 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