Skip to content

Repository files navigation

SwiftValidator

Build Statuscodecov.io

Swift Validator is a rule-based validation library for Swift.

Swift Validator

Core Concepts

  • UITextField + [Rule] + (and optional error UILabel) go into Validator
  • UITextField + ValidationError come out of Validator
  • Validator evaluates [Rule] sequentially and stops evaluating when a Rule fails.

Installation

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

Open your project in Xcode from the .xcworkspace file (not the usual project file):

$ open MyProject.xcworkspace

If you are using Carthage you will need to add this to your Cartfile

github "jpotts18/SwiftValidator"

Usage

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

Single Field Validation

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}

Custom Validation

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

Documentation

Checkout the docs here via @jazzydocs.

Credits

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.

Contributing

  1. Fork it
  2. Create your feature branch git checkout -b my-new-feature
  3. Commit your changes git commit -am 'Add some feature'
  4. Push to the branch git push origin my-new-feature
  5. Create a new Pull Request
  6. Make sure code coverage is at least 70%

About

A rule-based validation library for Swift

Resources

Stars

1.4k stars

Watchers

37 watching

Forks

Releases

Packages

Used by

Contributors

Languages