Latest 4.1.0
License MIT
Platforms ios 8.0, requires ARC
Frameworks Foundation, UIKit


Build Status

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.


# Podfile
source ''
platform :ios, "8.1"


# Swift 3
# Extended beyond UITextField
pod 'SwiftValidator', :git => '', :branch => 'master'

# Swift 2.1
# Extended beyond UITextField
# Note: Installing 4.x.x will break code from 3.x.x
pod 'SwiftValidator', :git => '', :tag => '4.0.0'

# Swift 2.1 (limited to UITextField validation)
pod '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"


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
let validator = Validator()

Register the fields that you want to validate

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

Validate Fields on button tap or however you would like to trigger it.

@IBAction func signupTapped(sender: AnyObject) {

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 {
    if let field = field as? UITextField {
      field.layer.borderColor =
      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 in
        if error == nil {
            // Field validation was successful
        } else {
            // Validation error occurred
    return true

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

class SSNVRule: RegexRule {

    static let regex = "^\d{3}-\d{2}-\d{4}$"

    convenience init(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.


  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%

Latest podspec

    "name": "SwiftValidatorNew",
    "version": "4.1.0",
    "summary": "A UITextField Validation library for Swift",
    "homepage": "",
    "screenshots": "",
    "license": {
        "type": "MIT",
        "file": "LICENSE.txt"
    "authors": {
        "Jeff Potter": "[email protected]"
    "social_media_url": "",
    "platforms": {
        "ios": "8.0"
    "source": {
        "git": "",
        "tag": "4.1.0"
    "source_files": "SwiftValidator/**/*.swift",
    "exclude_files": "Validator/AppDelegate.swift",
    "frameworks": [
    "requires_arc": true,
    "swift_version": "4.2"

Pin It on Pinterest

Share This