Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Form validation framework for iOS.
Objective-C CSS Other

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.

Import framework screen

ustwo™ iOS Form Validator

This framework allows you to validate inputs of text fields and text views in a convenient way.


  • Simply use US2ValidatorTextField instead of UITextField (US2ValidatorTextView instead of UITextView)
  • Know what went wrong and where
  • Create own conditions using regular expressions for example
  • Create own validators which contain a collection of conditions


Clone the project

Clone the project from the link above.

Import the framework project into your project

Import framework screen

Set target dependencies

Target dependencies screen

Add US2Localizable.strings to your projects Copy Bundle Resources

Target dependencies screen

Installation using CocoaPods

How to use CocoaPods? Go to:

Add the following line to your pod file:

pod 'US2FormValidator', '~> 1.0.8'


Add a condition to validator

US2Validator *validator = [[US2Validator alloc] init];

US2ConditionAlphabetic *condition = [[US2ConditionAlphabetic alloc] init];
[validator addCondition:condition];
[condition release];

US2ConditionCollection *conditionCollection1 = [validator checkConditions:@"HelloWorld"];
US2ConditionCollection *conditionCollection2 = [validator checkConditions:@"Hello World 123"];

BOOL isValid = conditionCollection1 == nil;                                                  // isValid == YES
isValid = conditionCollection2 == nil;                                                       // isValid == NO

// What went wrong?
NSLog(@"conditionCollection2: %@", conditionCollection2);

Add a validation text field

US2ValidatorTextField *firstNameTextField  = [[US2ValidatorTextField alloc] init];
firstNameTextField.validator               = [[[MyProjectValidatorName alloc] init] autorelease];
firstNameTextField.shouldAllowViolation    = YES;
firstNameTextField.validateOnFocusLossOnly = YES;
firstNameTextField.placeholder             = @"Enter first name";
firstNameTextField.validatorUIDelegate     = self;
[_textUICollection addObject:firstNameTextField];
[firstNameTextField release];

Create own condition

Create the interface.

#import <Foundation/Foundation.h>
#import "US2Condition.h"

@interface MyProjectConditionName : US2Condition


Create the implementation.

#import "MyProjectConditionName.h"

@implementation MyProjectConditionName

- (BOOL)check:(NSString *)string
    if (nil == string)
        string = [NSString string];

    NSError *error             = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-zA-Z .-]" options:0 error:&error];
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, string.length)];

    return numberOfMatches == string.length;

#pragma mark - Allow violation

- (BOOL)shouldAllowViolation
    return YES;

#pragma mark - Localization

- (NSString *)localizedViolationString
    return @"Not a valid name";


Create own validator

Create the interface.

#import <Foundation/Foundation.h>
#import "US2Validator.h"

#pragma mark - Validator interface

@interface MyProjectValidatorName : US2Validator


Create the implementation.

#import "MyProjectValidatorName.h"
#import "MyProjectConditionName.h"
#import "US2ConditionRange.h"

@implementation MyProjectValidatorName

#pragma mark - Initialization

- (id)init
    self = [super init];
    if (self)
        [self addCondition:[[[MyProjectConditionName alloc] init] autorelease]];

        US2ConditionRange *rangeCondition   = [[[US2ConditionRange alloc] init] autorelease];
        rangeCondition.range                = NSMakeRange(2, UINT16_MAX);
        rangeCondition.shouldAllowViolation = YES;

        [self addCondition:rangeCondition];

    return self;

Something went wrong with that request. Please try again.