OC中的正则表达式初体验

正则表达式是独立于任何编程语言的一门知识,却被广泛应用在各种开发环境中.

正则表达式在OC中可以使用一个叫做NSRegularExpression的类来处理.

本文初步记录了自己在使用过程中的一点体会.

记录点滴,供以后查阅之用.

从一个验证邮箱是否合法的需求说起

产品设计中,需要用户使用邮箱作为账号来进行登陆,在进行网络验证前,应在本地进行合理的邮箱合法性处理.因此在获取用户输入的信息之后……

  • 验证用户输入的邮箱是否合法

    定义(正则表达式)规则

    创建表达式对象

    使用正则对象进行验证

总体来说,只需要处理好上面的三个环节,就可以完成任务了.下面说下具我在代码中的具体实现

代码走起

生成定义的规则

1
NSString *pattern = @"\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";

创建表达式对象

1
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];

使用表达式对象进行验证

1
NSArray *result = [regular matchesInString:@"要验证的字符串" options:0 range:NSMakeRange(0, self.length)];
最终方案

因为可能会经常用到类似的功能,比如验证密码强度,手机号码,QQ号码等,最终采用字符串分类来实现拓展

  • NSString+ZDRegular.h
  • NSString+ZDRegular.m

NSString+ZDRegular.h

1
//  NSString+ZDRegular.h
//  ZDKonw
//
//  Created by Alexcai on 15/7/4.
//  Copyright (c) 2015年 zhidier. All rights reserved.
//
#import <Foundation/Foundation.h>

@interface NSString (ZDRegular)
/**
 *  判断是否合法邮件地址
 */
- (BOOL)isEmail;
@end

NSString+ZDRegular.m

1
//
//  NSString+ZDRegular.m
//  ZDKonw
//
//  Created by Alexcai on 15/7/4.
//  Copyright (c) 2015年 zhidier. All rights reserved.
//

#import "NSString+ZDRegular.h"

@implementation NSString (ZDRegular)

- (BOOL)isEmail{
    NSString *pattern = @"\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
    return [self matchesWithPattern:pattern];
}

// 正则匹配方法
- (BOOL)matchesWithPattern:(NSString *)pattern{
    NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];
    NSArray *result = [regular matchesInString:self options:0 range:NSMakeRange(0, self.length)];
    return result.count > 0;
}


@end
补充

关于正则表达式的常用元字符的使用说明

^:匹配字符串开头

$:匹配字符串结尾

\d:匹配一位数字

.:匹配换行之外的任意字符

*:匹配0个或多个

?:匹配0个或1个

+:匹配至少1个或多个

\w:匹配任意字母或数字

根据上面的正则表达式简单规则,我们可以在分类文件中继续写出一个验证手机号码合法性的方法

1
// 验证手机号码是否合法
- (BOOL)isMobilePhone{
  NSString *pattern = @"^1[3-9]\\d{9}$";
  return [self matchesWithPattern:pattern];
}
说明

本人尚在学习中,文中难免有误,欢迎大家指正