From 22ad9cf3c3e955c1f629b90f4900bd68255ff69d Mon Sep 17 00:00:00 2001 From: Ale Mohamad Date: Tue, 10 Dec 2024 16:57:28 +0100 Subject: [PATCH] Translation needed for #935 --- docs/basics/validation.es.md | 60 ++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/docs/basics/validation.es.md b/docs/basics/validation.es.md index 28c6e7a52..9cfbb7e82 100644 --- a/docs/basics/validation.es.md +++ b/docs/basics/validation.es.md @@ -227,3 +227,63 @@ Los validadores también pueden combinarse mediante operadores para construir va |`!`|prefijo|Invierte un validador, requiriendo lo opuesto.| |`&&`|infijo|Combina dos validadores, requiere ambos.| |`||`|infijo|Combina dos validadores, requiere al menos uno.| + +## Validadores Personalizados + +Crear un validador personalizado para códigos postales te permite extender la funcionalidad del marco de validación. En esta sección, te guiaremos a través de los pasos para crear un validador personalizado que valide códigos postales. + +Primero, crea un nuevo tipo para representar los resultados de la validación de `ZipCode`. Esta estructura será responsable de informar si una cadena dada es un código postal válido. + +```swift +extension ValidatorResults { + /// Representa el resultado de un validador que verifica si una cadena es un código postal válido. + public struct ZipCode { + /// Indica si la entrada es un código postal válido. + public let isValidZipCode: Bool + } +} +``` + +A continuación, haz que el nuevo tipo cumpla con `ValidatorResult`, que define el comportamiento esperado de un validador personalizado. + +```swift +extension ValidatorResults.ZipCode: ValidatorResult { + public var isFailure: Bool { + !self.isValidZipCode + } + + public var successDescription: String? { + "is a valid zip code" + } + + public var failureDescription: String? { + "is not a valid zip code" + } +} +``` + +Finalmente, implementa la lógica de validación para los códigos postales. Usa una expresión regular para verificar si la cadena de entrada coincide con el formato de un código postal de EE.UU. + +```swift +private let zipCodeRegex: String = "^\\d{5}(?:[-\\s]\\d{4})?$" + +extension Validator where T == String { + /// Valida si una cadena es un código postal válido. + public static var zipCode: Validator { + .init { input in + guard let range = input.range(of: zipCodeRegex, options: [.regularExpression]), + range.lowerBound == input.startIndex && range.upperBound == input.endIndex + else { + return ValidatorResults.ZipCode(isValidZipCode: false) + } + return ValidatorResults.ZipCode(isValidZipCode: true) + } + } +} +``` + +Ahora que has definido el validador personalizado `zipCode`, puedes usarlo para validar códigos postales en tu aplicación. Simplemente agrega la siguiente línea a tu código de validación: + +```swift +validations.add("zipCode", as: String.self, is: .zipCode) +```