diff --git a/iphone/Maps/Classes/InputValidators/MWMInputEmailValidator.h b/iphone/Maps/Classes/InputValidators/MWMInputEmailValidator.h new file mode 100644 index 0000000000..462b5777a1 --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputEmailValidator.h @@ -0,0 +1,5 @@ +#import "MWMInputValidator.h" + +@interface MWMInputEmailValidator : MWMInputValidator + +@end diff --git a/iphone/Maps/Classes/InputValidators/MWMInputEmailValidator.mm b/iphone/Maps/Classes/InputValidators/MWMInputEmailValidator.mm new file mode 100644 index 0000000000..b81c158ca6 --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputEmailValidator.mm @@ -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 * 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 diff --git a/iphone/Maps/Classes/InputValidators/MWMInputLoginValidator.h b/iphone/Maps/Classes/InputValidators/MWMInputLoginValidator.h new file mode 100644 index 0000000000..29c7f758aa --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputLoginValidator.h @@ -0,0 +1,5 @@ +#import "MWMInputValidator.h" + +@interface MWMInputLoginValidator : MWMInputValidator + +@end diff --git a/iphone/Maps/Classes/InputValidators/MWMInputLoginValidator.mm b/iphone/Maps/Classes/InputValidators/MWMInputLoginValidator.mm new file mode 100644 index 0000000000..6c5df1ecee --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputLoginValidator.mm @@ -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 diff --git a/iphone/Maps/Classes/InputValidators/MWMInputPasswordValidator.h b/iphone/Maps/Classes/InputValidators/MWMInputPasswordValidator.h new file mode 100644 index 0000000000..1522c60c57 --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputPasswordValidator.h @@ -0,0 +1,5 @@ +#import "MWMInputValidator.h" + +@interface MWMInputPasswordValidator : MWMInputValidator + +@end diff --git a/iphone/Maps/Classes/InputValidators/MWMInputPasswordValidator.mm b/iphone/Maps/Classes/InputValidators/MWMInputPasswordValidator.mm new file mode 100644 index 0000000000..7f4d539adf --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputPasswordValidator.mm @@ -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 diff --git a/iphone/Maps/Classes/InputValidators/MWMInputValidator.h b/iphone/Maps/Classes/InputValidators/MWMInputValidator.h new file mode 100644 index 0000000000..22e5852448 --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputValidator.h @@ -0,0 +1,6 @@ +@interface MWMInputValidator : NSObject + +- (BOOL)validateInput:(UITextField *)input; +- (BOOL)validateString:(NSString *)string; + +@end diff --git a/iphone/Maps/Classes/InputValidators/MWMInputValidator.mm b/iphone/Maps/Classes/InputValidators/MWMInputValidator.mm new file mode 100644 index 0000000000..b9a964e4eb --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputValidator.mm @@ -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 diff --git a/iphone/Maps/Classes/InputValidators/MWMInputValidatorFactory.h b/iphone/Maps/Classes/InputValidators/MWMInputValidatorFactory.h new file mode 100644 index 0000000000..66f43a806c --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputValidatorFactory.h @@ -0,0 +1,7 @@ +#import "MWMInputValidator.h" + +@interface MWMInputValidatorFactory : NSObject + ++ (MWMInputValidator *)validator:(NSString *)validator; + +@end diff --git a/iphone/Maps/Classes/InputValidators/MWMInputValidatorFactory.mm b/iphone/Maps/Classes/InputValidators/MWMInputValidatorFactory.mm new file mode 100644 index 0000000000..95119f046d --- /dev/null +++ b/iphone/Maps/Classes/InputValidators/MWMInputValidatorFactory.mm @@ -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