当前位置: 首页 > ai >正文

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

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

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

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

1.利用NSPredicate(谓词)匹配

例如匹配有效邮箱:

NSString *email = @"hellochina@gmail.com";
// 邮箱的正则表达式
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[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 = @"hellochina@gmail.com";NSRange range = [email rangeOfString:@"[A-Z0-9a-z._%+-]+@[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 = @"hellochina@gmail.com";NSRegularExpression *emailRegex = [NSRegularExpression regularExpressionWithPattern:@"[A-Z0-9a-z._%+-]+@[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._%+-]+@[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];
}

http://www.xdnf.cn/news/11713.html

相关文章:

  • MATCH_PARENT与FILL_PARENT:不要做什么和怎么做
  • Android 系统升级流程分析
  • 0-1背包问题(回溯法c++详解)
  • STM32外部挂载SDcard+移植Fatfs文件系统
  • tl r402路由器设置_tplogin.cn登录路由器怎么设置 tplogin.cn登录路由器设置步骤【详解】...
  • Android光线传感器获取光线强弱。LightSensorManager封装类
  • position的relative与absolute的区别
  • 非线性丙类功率放大器实验_倾斜光纤Bragg光栅:抑制高功率光纤激光系统SRS和SBS的理想选择...
  • 网安学习日志01:用kali复现ms17-010漏洞
  • 传奇私服游戏支付接口申请(已解决)
  • iTunes 9.0.3 更新
  • Linux系统服务之inetd
  • 445端口入侵详解
  • 用 Java 实现“人像动漫化”特效
  • Windows 安全基础——NetBIOS篇
  • 硬盘模式JBOD
  • C++实现银行家算法
  • 应用程序发生异常--未知的软件异常怎么办?
  • 【Android动画入门篇】
  • 寄存器分配图着色_着色基础------抗锯齿与半透明
  • Adobe Acrobat pro 9.0 序列号
  • 【硬核】优质 嵌入式C编程 必备指南
  • 张老师的生日究竟是哪天(经典推理题[转载])
  • php core,分析php core dump的原因
  • Unity3D入门基础知识汇总
  • 在线免费生成IntelliJ IDEA 15.0(16.+)注册码
  • tab切换之图片切换
  • a标签点击中文文件名乱码,通过a标签href属性跳转后台乱码问题
  • 电子合同签署平台有哪些?2024年靠谱10家对比
  • 深入剖析《开端》是如何找到引爆凶手的?