//检测全数字 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}$"]; }