陈斌彬的技术博客

Stay foolish,stay hungry

iOS 正则表达式的使用方法

前言:在表单验证中,我们经常会使用到正则,因为我们需要用它来判断用户输入的字符是否为合法的,如果是不合法的,那么应该提示用户输入错误,并不让提交至服务器。我们也可以通过正则表达式,从用户输入的字符串中过滤并获取我们想要的特定部分。 使用它来判断用户输入的字符串是否为合法的:

方法1.谓词(NSPredicate)创建正则表达式

// 编写正则表达式:只能是数字或英文,或两者都存在
NSString *regex = @"^[a-z0-9A-Z]*$";
// 创建谓词对象并设定条件的表达式
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
// 判断的字符串
NSString *str = @"Hello100";
// 对字符串进行判断
if ([predicate evaluateWithObject:str]) {
    NSLog(@"Match");
}

字符串 Hello100 是符合规则的,因此此例子会在日志输出"Match"。假如我们把 “Hello100” 换成其它字符(例如是“-、=”),以上例子将不会输出任何东西。

方法2.NSString实例方法

使用 rangeOfString:options: 方法可以做到,具体看例子:

NSString *phoneNo = @"13143503442";
NSRange range = [phoneNo rangeOfString:@"^1[3]\\d{9}$" options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
    NSLog(@"%@", [phoneNo substringWithRange:range]);
}

rangeOfString:options: 会返回一个 NSRange,用来接收匹配的范围,当匹配不到结果时,将会返回一个 NSIntegerMax 最大值,也就是NSNotFound ,因此我们可以用它来判断用户输入的内容是否符合规则。

方法3.NSRegularExpression类创建正则表达式

NSString *url = @"1229436624@qq.com";
NSError *error;
// 创建NSRegularExpression对象并指定正则表达式
NSRegularExpression *regex = [NSRegularExpression
                              regularExpressionWithPattern:@"[^@]*\\."
                              options:0
                              error:&error];
if (!error) { // 如果没有错误
    // 获取特特定字符串的范围
    NSTextCheckingResult *match = [regex firstMatchInString:url
                                                    options:0
                                                      range:NSMakeRange(0, [url length])];
    if (match) {
        // 截获特定的字符串
        NSString *result = [url substringWithRange:match.range];
        NSLog(@"%@",result);
    }
} else { // 如果有错误,则把错误打印出来
    NSLog(@"error - %@", error);
}

这个例子是从字符串里检索出以 “@” 开头“.”结尾的区间字符串,最后检索出来的字符串结尾包括 “.”,因此此例子最终输出结果为 “qq.”

正则表达式在线工具

http://tool.oschina.net/regex#