mirror of https://github.com/vapor/docs.git
parent
1611d7e0c6
commit
1609273809
|
|
@ -169,4 +169,65 @@ Die erste Überprüfung verwendet `!` als Operator, was bedingt, dass der Wert n
|
|||
validations.add("favoriteColor", as: String.self, is: .in("red", "blue", "green"), required: false)
|
||||
```
|
||||
|
||||
Die Überprüfung verwendet die Bedingung *in*, was bedingt, dass der Wert mit einer der Angaben im Beispiel (red, blue, green) übereinstimmen muss. Mit dem Parameter *required:* legen wir fest, dass die Überprüfung nicht fehlschlägt, sollte der Wert in der Anfrage fehlen.
|
||||
Die Überprüfung verwendet die Bedingung *in*, was bedingt, dass der Wert mit einer der Angaben im Beispiel (red, blue, green) übereinstimmen muss. Mit dem Parameter *required:* legen wir fest, dass die Überprüfung nicht fehlschlägt, sollte der Wert in der Anfrage fehlen.
|
||||
|
||||
## Benutzerdefinierte Validatoren
|
||||
|
||||
Durch die Erstellung einer eigenen Regelvorlage können wir Vapors bestehendes Regelwerk erweitern. Im folgenden Abschnitt erstellen wir eine neue Vorlage, um eine Postleitzahl zu gegenzuprüfen.
|
||||
|
||||
Zunächst erstellen wir einen neuen Typ, um die Ergebnisse der Validierung darzustellen. Diese Struktur ist dafür verantwortlich, zu melden, ob eine bestimmte Zeichenfolge eine gültige Postleitzahl ist.
|
||||
```swift
|
||||
extension ValidatorResults {
|
||||
/// Represents the result of a validator that checks if a string is a valid zip code.
|
||||
public struct ZipCode {
|
||||
/// Indicates whether the input is a valid zip code.
|
||||
public let isValidZipCode: Bool
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Als Nächstes wird der neue Typ an `ValidatorResult` angepasst, das das von einem benutzerdefinierten Validator erwartete Verhalten definiert.
|
||||
|
||||
```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"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Abschließend wird die Validierungslogik für Postleitzahlen implementiert. Dabei wird ein regulärer Ausdruck verwendet, um zu prüfen, ob die Eingabezeichenfolge dem Format einer US-amerikanischen Postleitzahl entspricht.
|
||||
|
||||
```swift
|
||||
private let zipCodeRegex: String = "^\\d{5}(?:[-\\s]\\d{4})?$"
|
||||
|
||||
extension Validator where T == String {
|
||||
/// Validates whether a `String` is a valid zip code.
|
||||
public static var zipCode: Validator<T> {
|
||||
.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)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Nachdem die neue Vorlage definiert wurde, kann sie in der Anwendung verwendet werden:
|
||||
|
||||
```swift
|
||||
validations.add("zipCode", as: String.self, is: .zipCode)
|
||||
```
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue