Skip to content

Instantly share code, notes, and snippets.

@batosai
Last active January 29, 2018 14:08
Show Gist options
  • Save batosai/4128581 to your computer and use it in GitHub Desktop.
Save batosai/4128581 to your computer and use it in GitHub Desktop.
NSString validator
//
// NSString+Validator.h
// IRedmine
//
// Created by Jeremy on 29/08/12.
// Copyright (c) 2012 opsone. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSString (Validator)
- (BOOL)isEmail;
- (BOOL)isPhoneNumber;
- (BOOL)isDigit;
- (BOOL)isNumeric;
- (BOOL)isUrl;
- (BOOL)isLengthMin:(NSUInteger)length;
- (BOOL)isLengthMax:(NSUInteger)length;
- (BOOL)isLengthMin:(NSUInteger)min andMax:(NSUInteger)max;
- (BOOL)isEmpty;
- (NSString *)toSlug;
@end
//
// NSString+Validator.m
// IRedmine
//
// Created by Jeremy on 29/08/12.
// Copyright (c) 2012 opsone. All rights reserved.
//
#import "NSString+Validator.h"
@implementation NSString (Validator)
- (BOOL)isEmail {
NSString *regex = @"[a-zA-Z0-9.\\-_]{2,32}@[a-zA-Z0-9.\\-_]{2,32}\\.[A-Za-z]{2,4}";
NSPredicate *regExPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [regExPredicate evaluateWithObject:self];
}
- (BOOL)isPhoneNumber {
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink|NSTextCheckingTypePhoneNumber error:nil];
return [detector numberOfMatchesInString:self options:0 range:NSMakeRange(0, [self length])];
}
- (BOOL)isDigit {
NSCharacterSet *alphaNums = [NSCharacterSet decimalDigitCharacterSet];
NSCharacterSet *inStringSet = [NSCharacterSet characterSetWithCharactersInString:self];
return [alphaNums isSupersetOfSet:inStringSet];
}
- (BOOL)isNumeric {
NSString *regex = @"([0-9])+((\\.|,)([0-9])+)?";
NSPredicate *regExPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [regExPredicate evaluateWithObject:self];
}
- (BOOL)isUrl {
NSString *regex = @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/](([0-9a-zA-Z_-]*)*|([0-9]*)|([-|_])*))+";
NSPredicate *regExPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [regExPredicate evaluateWithObject:self];
}
- (BOOL)isLengthMin:(NSUInteger)length {
return (self.length >= length);
}
- (BOOL)isLengthMax:(NSUInteger)length {
return (self.length <= length);
}
- (BOOL)isLengthMin:(NSUInteger)min andMax:(NSUInteger)max {
return ([self isLengthMin:min] && [self isLengthMax:max]);
}
- (BOOL)isEmpty {
return (!self.length);
}
- (NSString *)toSlug {
NSString *value = [self lowercaseString];
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:=.;,!?\\$#@&§%£¥€*^¨°'\"{}()[]<>+"];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
doNotWant = [NSCharacterSet characterSetWithCharactersInString:@" "];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"-"];
doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"àáâãäå"];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"a"];
doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"èéêë"];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"e"];
doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"òóôõöø"];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"o"];
doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"ìíîï"];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"i"];
doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"ùúûü"];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"u"];
doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"ÿ"];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"y"];
doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"ñ"];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"n"];
doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"ç"];
value = [[value componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @"c"];
return value;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment