Swift Validator is a rule-based validation library for Swift.
UITextField+[Rule]+ (and optional errorUILabel) go intoValidatorUITextField+ValidationErrorcome out ofValidatorValidatorevaluates[Rule]sequentially and stops evaluating when aRulefails.
# Podfilesource'https://github.com/CocoaPods/Specs.git'platform:ios,"8.1"use_frameworks!# Swift 4.2pod'SwiftValidator',:git=>'https://github.com/jpotts18/SwiftValidator.git',:tag=>'4.2.0'# Swift 3# Extended beyond UITextFieldpod'SwiftValidator',:git=>'https://github.com/jpotts18/SwiftValidator.git',:branch=>'master'# Swift 2.1# Extended beyond UITextField# Note: Installing 4.x.x will break code from 3.x.xpod'SwiftValidator',:git=>'https://github.com/jpotts18/SwiftValidator.git',:tag=>'4.0.0'# Swift 2.1 (limited to UITextField validation)pod'SwiftValidator',:git=>'https://github.com/jpotts18/SwiftValidator.git',:tag=>'3.0.5'Install into your project:
$ pod installOpen your project in Xcode from the .xcworkspace file (not the usual project file):
$ open MyProject.xcworkspaceIf you are using Carthage you will need to add this to your Cartfile
github "jpotts18/SwiftValidator"You can now import SwiftValidator framework into your files.
Initialize the Validator by setting a delegate to a View Controller or other object.
// ViewController.swift
letvalidator=Validator()Register the fields that you want to validate
overridefunc viewDidLoad(){
super.viewDidLoad()
// Validation Rules are evaluated from left to right.
validator.registerField(fullNameTextField, rules:[RequiredRule(),FullNameRule()])
// You can pass in error labels with your rules
// You can pass in custom error messages to regex rules (such as ZipCodeRule and EmailRule)
validator.registerField(emailTextField, errorLabel: emailErrorLabel, rules:[RequiredRule(),EmailRule(message:"Invalid email")])
// You can validate against other fields using ConfirmRule
validator.registerField(emailConfirmTextField, errorLabel: emailConfirmErrorLabel, rules:[ConfirmationRule(confirmField: emailTextField)])
// You can now pass in regex and length parameters through overloaded contructors
validator.registerField(phoneNumberTextField, errorLabel: phoneNumberErrorLabel, rules:[RequiredRule(),MinLengthRule(length:9)])
validator.registerField(zipcodeTextField, errorLabel: zipcodeErrorLabel, rules:[RequiredRule(),ZipCodeRule(regex :"\\d{5}")])
// You can unregister a text field if you no longer want to validate it
validator.unregisterField(fullNameTextField)}Validate Fields on button tap or however you would like to trigger it.
@IBActionfunc signupTapped(sender:AnyObject){
validator.validate(self)}Implement the Validation Delegate in your View controller
// ValidationDelegate methods
func validationSuccessful(){
// submit the form
}func validationFailed(_ errors:[(Validatable,ValidationError)]){
// turn the fields to red
for(field, error)in errors {iflet field = field as?UITextField{
field.layer.borderColor =UIColor.red.cgColor
field.layer.borderWidth =1.0}
error.errorLabel?.text = error.errorMessage // works if you added labels
error.errorLabel?.isHidden =false}}You may use single field validation in some cases. This could be useful in situations such as controlling responders:
// Don't forget to use UITextFieldDelegate
// and delegate yourTextField to self in viewDidLoad()
func textFieldShouldReturn(textField:UITextField)->Bool{
validator.validateField(textField){ error inif error ==nil{
// Field validation was successful
}else{
// Validation error occurred
}}returntrue}We will create a SSNRule class to show how to create your own Validation. A United States Social Security Number (or SSN) is a field that consists of XXX-XX-XXXX.
Create a class that inherits from RegexRule
classSSNVRule:RegexRule{staticletregex="^\\d{3}-\\d{2}-\\d{4}$"convenienceinit(message :String="Not a valid SSN"){self.init(regex:SSNVRule.regex, message : message)}}Checkout the docs here via @jazzydocs.
Swift Validator is written and maintained by Jeff Potter @jpotts18. David Patterson @dave_tw12 actively works as a collaborator. Special thanks to Deniz Adalar for adding validation beyond UITextField.
- Fork it
- Create your feature branch
git checkout -b my-new-feature - Commit your changes
git commit -am 'Add some feature' - Push to the branch
git push origin my-new-feature - Create a new Pull Request
- Make sure code coverage is at least 70%
