iOS开发_常用的正则表达式

  • 实现正则表达式匹配的方式
  • 常用的正则表达式

实现正则表达式匹配的方式

iOS中有三种方式可以实现正则表达式的匹配。

1.利用NSPredicate(谓词)匹配

例如匹配有效邮箱:

NSString *email = @"[email protected]";
// 邮箱的正则表达式
NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
// 创建并返回一个由 给定格式创建的新的字符串 形成的新谓词, 并解析结果.
NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
// 返回布尔值, 给定对象是否与接受者的条件匹配
NSLog(@"%d", [emailPredicate evaluateWithObject:email]);

使用 NSPredicate 的字符串评估功能来进行正则表达式处理,其比较关键字为:MATCHES。谓词匹配比较灵活,但是需要了解谓词的相关知识。

2.利用rangeOfString: options: 直接查找

NSString *email = @"[email protected]";

NSRange range = [email rangeOfString:@"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" options:NSRegularExpressionSearch];

// NSNotFound, 常量, 表明一项请求无法找到或者不存在的值。
if (range.location != NSNotFound) {
  // 在给定的范围内返回一个包含接受者特点的字符串对象
  NSLog(@"%@", [email substringWithRange:range]);
}

options中设定NSRegularExpressionSearch表示利用正则表达式匹配,会返回第一个匹配结果的位置。

3.使用NSRegularExpression(正则表达式类)匹配

NSString *email = @"[email protected]";

NSRegularExpression *emailRegex = [NSRegularExpression regularExpressionWithPattern:@"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" options:NSRegularExpressionCaseInsensitive error:nil];

NSTextCheckingResult *result = [emailRegex firstMatchInString:email options:0 range:NSMakeRange(0, [email length])];
if (result) {
  NSLog(@"%@", [email substringWithRange:result.range]);
}

使用系统的正则表达式类(NSRegularExpression)会返回匹配的多个结果。

小结:

第一种方式需要掌握NSPredicate的用法,需要查阅Apple API或者相关技术文档,如果只考虑第一个匹配的结果,第二种方式较为简单,如果需要匹配多个结果,同时匹配多次,第三种方式效率会更高。


常用的正则表达式

// 验证邮箱
+ (BOOL) verifyEmail:(NSString *)email
{
    NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailPredicate evaluateWithObject:email];
}

// 验证手机号码
+ (BOOL) verifyMobilePhone:(NSString *)mobilePhone
{
    NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
    NSPredicate *phonePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
    return [phonePredicate evaluateWithObject:mobilePhone];
}

// 验证用户名
+ (BOOL) verifyUserName:(NSString *)username
{
    NSString *userNameRegex = @"^[A-Za-z0-9]{6,20}+$";
    NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];
    return [userNamePredicate evaluateWithObject:username];
}

// 验证密码
+ (BOOL) verifyPassword:(NSString *)password
{
    NSString *passwordRegex = @"^[a-zA-Z0-9]{6,20}+$";
    NSPredicate *passwordRegexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passwordRegex];
    return [passWordPredicate evaluateWithObject:password];
}

// 验证昵称
+ (BOOL) verifyNickname:(NSString *)nickname
{
    NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{4,8}$";
    NSPredicate *nicknamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
    return [nicknamePredicate evaluateWithObject:nickname];
}

// 验证身份证号
+ (BOOL) verifyIdentityCard:(NSString *)identityCard
{
    BOOL flag;
    if (identityCard.length <= 0) {
        flag = NO;
        return flag;
    }
    NSString *idRegex = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",idRegex];
    return [identityCardPredicate evaluateWithObject:identityCard];
}

// 验证字母和数字
+ (BOOL)verifyFigureAndLetter:(NSString *)string
{
    NSString *regular = @"^[A-Za-z0-9]+$";
    NSPredicate *numberAndLetterTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regular];
    return [numberAndLetterTest evaluateWithObject:string];
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-25 23:59:44

iOS开发_常用的正则表达式的相关文章

iOS开发中常用第三方库的使用和配置-GDataXML

这篇文章旨在给自己以后需要时能及时的查到,省得每次都去baidu. 1. xml解析库-GDataXML 参考文章:http://blog.csdn.net/tangren03/article/details/7868246 GDataXML下载地址: (1)GDataXML.h/m文件 http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/ (2)DGataDefines.h

IOS开发中常用的宏定义

有些时候,我们需要将代码简洁化,这样便于读代码.我们可以将一些不变的东东抽取出来,将变化的东西作为参数.定义为宏,这样在写的时候就简单多了. 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操作系统是不是ios7 #define IOS7 ( [[[UIDevice currentDevice].systemVersion doubleValue] >= 7.0] ) 2. 判断当前设备是不是iPhone5 #define kScreenIphone5 (([[UIScreen main

iOS开发API常用英语名词

iOS开发API常用英语名词 0. indicating 决定 1.in order to 以便 2.rectangle bounds 矩形尺寸 3.applied 应用 4.entirety 全部 5.technique 方法 6.truncating 截短 7.wrapping  换行 8.string 字符串 9.familiar style 简体 10.The styled text 主题样式 11.Constants 常量 12.Attribute 属性 13.Consecutive

iOS开发中常用的参数传递方法

在iOS开发中常用的参数传递有以下几种方法: 采用代理模式 采用iOS消息机制 通过NSDefault存储(或者文件.数据库存储等) 通过AppDelegate定义全局变量(或者使用UIApplication.定义一个单例类等) 通过控制器属性传递 使用代理方式传递参数的步骤如下: 1.定义协议,协议中定义好传参时所需要的方法 2.目标视图控制器定义一个代理对象 3.源视图控制器实现协议并在初始化目标控制器时指定目标控制器的代理为其自身 4.需要传参的时候在目标窗口调用代理的协议方法

iOS开发中常用的数学函数

/*---- 常用数学公式 ----*/ //指数运算 3^2 3^3 NSLog(@"结果 %.f", pow(3,2)); //result 9 NSLog(@"结果 %.f", pow(3,3)); //result 27 //开平方运算 NSLog(@"结果 %.f", sqrt(16)); //result 4 NSLog(@"结果 %.f", sqrt(81)); //result 9 //进一 NSLog(@&q

iOS开发中常用的轮子 第四篇 收集齐7个轮子,准备高仿部分微博APP页面

产品原因有几张页面会参考微博APP来做,先收集齐轮子:计划这周完成,然后放到github上开源. 1,微博流刷新: 2,浏览微博中的图片: 3,发布微博: 4,发微博时选择照片: ============分割线:具体如下 ============= 选择相册中图片: 1,UzysAssetsPickerController 链接:https://github.com/uzysjung/UzysAssetsPickerController 介绍:用于替换UIImagePickerControlle

iOS开发之----常用函数和常数

介绍一下Objective-c常用的函数,常数变量 算术函数 [算术函数] 函数名 说明 int rand() 随机数生成.(例)srand(time(nil)); //随机数初期化int val = rand()P; //0-49之间的随机数 int abs(int a) 整数的绝对值(例)int val = abs(-8); →8※浮点数的时候用fabs. double fabs(double a) 浮点数的绝对值(例)double val = fabs(-12.345); →12.345※

iOS开发之常用第三方框架(下载地址,使用方法,总结)

iOS开发之常用第三方框架(下载地址,使用方法,总结) 说句实话,自学了这么久iOS,如果说我不知道的但是又基本上都摸遍了iOS相关知识,但是每次做项目的时候,遇到难一点的地方或者没试过的东西就闷了. 比如这次,打算做一个着手做一个iOS的项目,是一个关于日计划的小软件,界面都其他的都算满意,网络就不说了,没有服务器,所以很多数据相关的功能不无法实现. 但是嘴头疼的事情就是,比如遇到一个功能的时候,其实如果说要实现的话还是可以的,但是每次在我实现之后我总会想到,这么实现更好,这么实现更简单,更加

iOS开发中常用的轮子 第四篇 抽屉和侧滑效果

为避免重复造轮子,很多效果和功能都可以从github上找到.清点以前的项目,整理出了很多用过的开源代码,每天奉送一批. 学习例子的方法: 1,了解:运行一遍例子,弄清这些代码的究竟是什么: 2,使用:在之后开发工程中使用这些例子: 3,研究代码:研究例子的代码的实现,简单修改做出自己的效果. 记得要么是facebook,或是twitter第一个使用了个交互效果:而后风靡全球,是产品必用抽屉:再后来就是延生出了各种变形过的效果: 所以,产品经理要你实现抽屉和侧滑效果时,一定要确定到底是什么样抽屉和