-
Notifications
You must be signed in to change notification settings - Fork 0
/
NSString+Extensions.m
174 lines (136 loc) · 5.51 KB
/
NSString+Extensions.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#import "NSString+Extensions.h"
@implementation NSString (Extensions)
- (NSString *)documentsDirectoryPath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return documentsDirectory;
}
- (NSString *)cacheDirectoryPath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return documentsDirectory;
}
- (NSString *)privateDirectoryPath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@"Private Documents"];
NSError *error;
[[NSFileManager defaultManager] createDirectoryAtPath:documentsDirectory withIntermediateDirectories:YES attributes:nil error:&error];
return documentsDirectory;
}
- (NSString *)pathInDocumentDirectory
{
NSString *documentsDirectory = [self documentsDirectoryPath];
NSString *path = [documentsDirectory stringByAppendingPathComponent:self];
return path;
}
- (NSString *)pathInCacheDirectory
{
NSString *documentsDirectory = [self cacheDirectoryPath];
NSString *path = [documentsDirectory stringByAppendingPathComponent:self];
return path;
}
- (NSString *)pathInPrivateDirectory
{
NSString *documentsDirectory = [self privateDirectoryPath];
NSString *path = [documentsDirectory stringByAppendingPathComponent:self];
return path;
}
- (NSString *)pathInDirectory:(NSString *)dir cachedData:(BOOL)yesOrNo
{
NSString *documentsDirectory = nil;
if (yesOrNo) {
documentsDirectory = [self cacheDirectoryPath];
}
else {
documentsDirectory = [self documentsDirectoryPath];
}
NSString *dirPath = [documentsDirectory stringByAppendingString:dir];
NSString *path = [dirPath stringByAppendingString:self];
NSFileManager *manager = [NSFileManager defaultManager];
[manager createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:nil];
return path;
}
- (NSString *)pathInDirectory:(NSString *)dir
{
return [self pathInDirectory:dir cachedData:YES];
}
- (NSString *)removeWhiteSpace
{
return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
- (NSString *)stringByNormalizingCharacterInSet:(NSCharacterSet *)characterSet withString:(NSString *)replacement
{
NSMutableString* result = [NSMutableString string];
NSScanner* scanner = [NSScanner scannerWithString:self];
while (![scanner isAtEnd]) {
if ([scanner scanCharactersFromSet:characterSet intoString:NULL]) {
[result appendString:replacement];
}
NSString* stringPart = nil;
if ([scanner scanUpToCharactersFromSet:characterSet intoString:&stringPart]) {
[result appendString:stringPart];
}
}
return [[result copy] autorelease];
}
- (NSString *)bindSQLCharacters
{
NSString *bindString = self;
bindString = [bindString stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
return bindString;
}
- (NSString *)trimSpaces
{
return [self stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\t\n "]];
}
-(NSString*)trimCharacters:(NSString*)trimStr{
return [self stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:trimStr]];
}
- (NSString *)stringByTrimmingLeadingCharactersInSet:(NSCharacterSet *)characterSet {
NSRange rangeOfFirstWantedCharacter = [self rangeOfCharacterFromSet:[characterSet invertedSet]];
if (rangeOfFirstWantedCharacter.location == NSNotFound) {
return @"";
}
return [self substringFromIndex:rangeOfFirstWantedCharacter.location];
}
- (NSString *)stringByTrimmingLeadingWhitespaceAndNewlineCharacters {
return [self stringByTrimmingLeadingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
- (NSString *)stringByTrimmingTrailingCharactersInSet:(NSCharacterSet *)characterSet {
NSRange rangeOfLastWantedCharacter = [self rangeOfCharacterFromSet:[characterSet invertedSet]
options:NSBackwardsSearch];
if (rangeOfLastWantedCharacter.location == NSNotFound) {
return @"";
}
return [self substringToIndex:rangeOfLastWantedCharacter.location+1]; // non-inclusive
}
- (NSString *)stringByTrimmingTrailingWhitespaceAndNewlineCharacters {
return [self stringByTrimmingTrailingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
+ (BOOL)validateEmail:(NSString *)candidate
{
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:candidate];
}
// Range must be in {a,b}. Where a is mimimum length and b is max length
+ (BOOL)validateForNumericAndCharacets:(NSString *)candidate WithLengthRange:(NSString *)strRange
{
BOOL valid = NO;
NSCharacterSet *alphaNums = [NSCharacterSet alphanumericCharacterSet];
NSCharacterSet *inStringSet = [NSCharacterSet characterSetWithCharactersInString:candidate];
BOOL isAlphaNumeric = [alphaNums isSupersetOfSet:inStringSet];
if(isAlphaNumeric){
NSString *emailRegex = [NSString stringWithFormat:@"[%@]%@",candidate, strRange];
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
valid =[emailTest evaluateWithObject:candidate];
}
return valid;
}
@end