Form Validation validates user input of text fields and text views in obvious way.
- Use ValidationTextField or ValidationTextView instead of UITextField or UITextView.
- Validation Rules:
- Validate all the textFields/textViews in form at once, by passing validator for each textFiled/textView or validate input of each individually.
- Decorates the textField/textView for valid or invalid input.
- Payment cards are Luhn Verified.
- Extensive code documentation.
CocoaPods is the dependency manager for Cocoa Libraries. You can install Cocoapods using following command:
$ sudo gem install cocoapods
If you wish to integrate FormValidaton in your project, the make following changes in your Podfile:
source 'https://github.com/Nickelfox/FormValidation.git'
platform :ios, '9.0'
use_frameworks!
pod 'FLFormValidator', '~> 1.0'
After saving Podfile. Run following command:
pod install
If you don't want to use any dependency manager in your project, you can install this library manually too.
Just add the following lines to your Podfile:
pod "FormValidation", :git => 'https://github.com/Nickelfox/FormValidation.git'
After saving Podfile, run following:
pod install
The core component of FormValidator is ValidationProtocol.
ValidatableInput
This protocol comprises of three variables.
isOptional of type Bool
inputText of type String
validator of type ValidationProtocol
ValidationProtocol
protocol ValidationProtocol {
func validate(_ value: String) -> (Bool, String?)
}This protocol is conformed by class.
class NameValidator: ValidationProtocol {
func validate(_ value: String) -> (Bool, String?) {
return value.isAlphabetic ? (true, nil) : (false, "error")
}
}Form
Form class takes array of ValidatableInput as input.
Method validate of class Form returns a tuple (bool, String). If the input of elements of array are valid, then it returns (true, nil) else (false, "error").
ValidationTextField
ValidationTextField or ValidationTextView can be use instead of UITextField and UITextView. ValidationTextField and ValidationTextView are subclass of UITextField and UITextView respectively.
@IBOutlet var nameTextField: ValidationTextField!
let form = Form()
override func viewDidLoad() {
super.viewDidLoad()
nameTextField.validator = NameValidator()
form.inputs = [nameTextField]
}
@IBAction func handleValidationTapped(_ sender: Any) {
let (isValid, errors) = form.validate()
if isValid {
// Cool ya! submit the form
} else {
// Eww! notify errors
}
}extension String
All the validation type are written in this extension.
private let alphabeticRegx = "^[A-z ]+$"
var isAlphabetic: Bool {
if !isEmpty {
let alphabeticTest = NSPredicate(format: "SELF MATCHES %@", alphabeticRegx)
return alphabeticTest.evaluate(with:self)
}
return false
}Validating input of individual textField/textView
if textField.text.isAlphabetic {
// 👍 valid input
} else {
// hmm! 😒 wrong input
}Detailed example is there in Demo Directory.
- 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