[ios] Added input validators.

This commit is contained in:
Илья Гречухин 2015-12-28 17:19:00 +03:00 committed by Sergey Yershov
parent 6d6358789c
commit e036813962
10 changed files with 123 additions and 0 deletions

View file

@ -0,0 +1,5 @@
#import "MWMInputValidator.h"
@interface MWMInputEmailValidator : MWMInputValidator
@end

View file

@ -0,0 +1,32 @@
#import "MWMInputEmailValidator.h"
static NSString * const kEmailRegexPattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}";
@implementation MWMInputEmailValidator
- (BOOL)validateString:(NSString *)string
{
if (![super validateString:string])
return NO;
NSError * err;
NSRegularExpression * regex =
[NSRegularExpression regularExpressionWithPattern:kEmailRegexPattern
options:NSRegularExpressionCaseInsensitive
error:&err];
NSAssert(!err, @"Invalid regular expression");
NSMutableArray<NSString *> * matches = [@[] mutableCopy];
NSRange const range = {0, string.length};
[regex enumerateMatchesInString:string
options:NSMatchingReportProgress
range:range
usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags,
BOOL * _Nonnull stop)
{
[matches addObject:[string substringWithRange:result.range]];
}];
if (matches.count != 1)
return NO;
return [matches[0] isEqualToString:string];
}
@end

View file

@ -0,0 +1,5 @@
#import "MWMInputValidator.h"
@interface MWMInputLoginValidator : MWMInputValidator
@end

View file

@ -0,0 +1,14 @@
#import "MWMInputLoginValidator.h"
NSUInteger constexpr minLoginLength = 3;
@implementation MWMInputLoginValidator
- (BOOL)validateString:(NSString *)string
{
if (![super validateString:string])
return NO;
return string.length >= minLoginLength;
}
@end

View file

@ -0,0 +1,5 @@
#import "MWMInputValidator.h"
@interface MWMInputPasswordValidator : MWMInputValidator
@end

View file

@ -0,0 +1,14 @@
#import "MWMInputPasswordValidator.h"
NSUInteger constexpr minPasswordLength = 8;
@implementation MWMInputPasswordValidator
- (BOOL)validateString:(NSString *)string
{
if (![super validateString:string])
return NO;
return string.length >= minPasswordLength;
}
@end

View file

@ -0,0 +1,6 @@
@interface MWMInputValidator : NSObject
- (BOOL)validateInput:(UITextField *)input;
- (BOOL)validateString:(NSString *)string;
@end

View file

@ -0,0 +1,15 @@
#import "MWMInputValidator.h"
@implementation MWMInputValidator
- (BOOL)validateInput:(UITextField *)input
{
return [self validateString:input.text];
}
- (BOOL)validateString:(NSString *)string
{
return YES;
}
@end

View file

@ -0,0 +1,7 @@
#import "MWMInputValidator.h"
@interface MWMInputValidatorFactory : NSObject
+ (MWMInputValidator *)validator:(NSString *)validator;
@end

View file

@ -0,0 +1,20 @@
#import "MWMInputEmailValidator.h"
#import "MWMInputLoginValidator.h"
#import "MWMInputPasswordValidator.h"
#import "MWMInputValidator.h"
#import "MWMInputValidatorFactory.h"
@implementation MWMInputValidatorFactory
+ (MWMInputValidator *)validator:(NSString *)validator
{
if ([validator isEqualToString:[MWMInputLoginValidator className]])
return [[MWMInputLoginValidator alloc] init];
if ([validator isEqualToString:[MWMInputPasswordValidator className]])
return [[MWMInputPasswordValidator alloc] init];
if ([validator isEqualToString:[MWMInputEmailValidator className]])
return [[MWMInputEmailValidator alloc] init];
return [[MWMInputValidator alloc] init];
}
@end