//檢測全數字 void test() { NSString *username = @"5347858h7"; BOOL flag = YES; for (int i = 0; i<username.length; i++) { unichar c = [username characterAtIndex:i]; if (!(c >= '0' && c <= '9')) { flag = NO; break; } } if (flag) { NSLog(@"用戶名正確"); } else { NSLog(@"裏面包含了非數字"); } }
1).使用正則表達式的步驟:
1>.建立一個正則表達式對象:定義規則
2>.利用正則表達式對象來測試 相應的字符串( 1個對象對象一個字符串,輸出結果是數組)
正則表達式
2).樣式\規則數組
NSString *pattern = @"ab7";
[] : 找到內部的某一個字符便可框架
| :匹配多個條件,至關於or\或測試
\\ :轉義字符,能夠隔開特殊字符,如[,若是不加\\,會識別爲找到[]內部的內容 ui
. : 省略符
url
eg: \\[.+\\] 表示 [.................] 括號以及括號內的內容
NSString *pattern = @"[0123456789]";
NSString *pattern = @"[0-9]";
NSString *pattern = @"[a-zA-Z0-9]"; 表示a~z和A~z和0~9 不須要空格
NSString *pattern = @"[0-9][0-9]";
NSString *pattern = @"\\d\\d\\d"; \\d表明數字
NSString *pattern = @"\\d{2,4}"; {2,4} 2到4位spa
NSString *pattern = @"\\d{2,4}|\\d\\d\\d";
code
? + *
? : 0個或者1個
+ : 至少1個 //經常使用
* : 0個或者多個
component
^表明首位 $表明末位orm
NSString *username = @"6gjkhdjkhgkjh7"; // NSString *pattern = @"^\\d{3}"; //首位爲數字且連續3個數字 // NSString *pattern = @"\\d{3}$"; //末位爲數字且連續3個數字 // 1.建立正則表達式 NSString *pattern = @"^\\d.*\\d$"; // 意思是首位爲數字 .是省略*多個省略 末位也爲數字 NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil]; // 2.測試字符串 NSArray *results = [regex matchesInString:username options:0 range:NSMakeRange(0, username.length)]; NSLog(@"%zd", results.count);
1. //微博高亮 NSString *str = @"#呵呵呵#[偷笑] http://foo.com/blah_blah #解放軍#//http://foo.com/blah_blah @Ring花椰菜:就#范德薩發生的#捨不得打[test] 就慣#急急急#着他吧[挖鼻屎]//@崔西獅:小拳頭舉起又放下了 說點啥好呢…… //@toto97:@崔西獅 蹦米咋不揍他#哈哈哈# http://foo.com/blah_blah"; // 表情的規則 NSString *emotionPattern = @"\\[[0-9a-zA-Z\\u4e00-\\u9fa5]+\\]"; // @的規則 NSString *atPattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5]+"; // #話題#的規則 NSString *topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#"; // url連接的規則 NSString *urlPattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))"; NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern]; // NSArray *cmps = [str componentsMatchedByRegex:pattern]; //第一種方法:遍歷全部的匹配結果 NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil]; // 2.測試字符串 NSArray *results = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)]; // 3.遍歷結果 for (NSTextCheckingResult *result in results) { NSLog(@"%@ %@", NSStringFromRange(result.range), [str substringWithRange:result.range]); } //RegexKitLite的使用 1.須要導入libicucore框架 2.由於是非arc,須要在Build Phases-->Compile Sources-->RegexKitLite.m-->添加-fno-objc-arc // 第二種方法:遍歷全部的匹配結果 [str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) { NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges)); }]; NSLog(@"-------------"); // 以正則表達式爲分隔符 [str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) { NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges)); }]; } 2. - (BOOL)match:(NSString *)pattern { // 1.建立正則表達式 NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil]; // 2.測試字符串 NSArray *results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)]; return results.count > 0; } //是不是QQ號 - (BOOL)isQQ { // 1.不能以0開頭 // 2.所有是數字 // 3.5-11位 return [self match:@"^[1-9]\\d{4,10}$"]; } //是不是手機號碼 - (BOOL)isPhoneNumber { // 1.所有是數字 // 2.11位 // 3.以13\15\18\17開頭 return [self match:@"^1[3578]\\d{9}$"]; // JavaScript的正則表達式:\^1[3578]\\d{9}$\ } //是不是ip地址 - (BOOL)isIPAddress { // 1-3個數字: 0-255 // 1-3個數字.1-3個數字.1-3個數字.1-3個數字 return [self match:@"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"]; }