iOS中正则表达式的使用与了解
来源:互联网 发布:如何将数据转换成图表 编辑:程序博客网 时间:2024/05/29 09:15
正则表达式是一种用来进行文本匹配的工具,其语法优美简洁。在开发中,查找、对比以及匹配字符串是家常便饭的业务,通过正则表达式我们将这些业务描述成某些需求规则,来让我们的代码更美观、实用。例如我们要验证用户输入的密码长度是否满足6~18位的长度,新手最常见的验证方式是判断输入的密码长度
return (textField.text.length >= 6 && textField.text.leng <= 18);
尽管这种判断方式没有任何问题,而上面的验证换做正则表达式的匹配字符就显得短小精悍
^.{6,18}
再比如,对于密码强度的认证。如今的密码应该包括一个或以上的大写字母以及小写字母,对此正则表达式的匹配是
(^.[A-Z]+.[a-z]+.*
表达式字符解析
如果是新手开发者,那么很有可能不理解上面的正则表达式。那么我们先看第一个匹配条件,匹配6-18位的密码长度。根据题目的要求,就能够轻易的判断出{6,18}表示6-18位。其中,{n}匹配字符重复n次;{n,}匹配重复n次或更多次;{n,m}匹配重复n到m之间次数。
那么读者对^、.和
那么结合这几个字符代表含义,可以得出.符号表示任一字符(除换行符之外)。那么还可以得出{6,18}这个特殊符号表示的是前一个符号代表的位数。结合起来说^.{6,18}
最后的一个表达式可能是最复杂的表达式,根据上面对部分符号的解析。我们可以把
^.[A-Z]+.[a-z]+.*
拆分成 ^.[A-Z]+.[a-z]+.*
这两个单独的表达式,而中间的|不难猜到就是逻辑的或。我们将对前一个进行拆分,来一步步识别这个表达式的匹配规则。这里教大家我拆分表达式的方法:我把表达式的字符分为两类:值表达和修饰表达。所谓值表达就是说这个符号表示了某个值,就像\d表示数字,.表示任意非换行符字符。修饰表达用来修饰值达成某种条件,比如{2}表示前面一个值重复两次,表示前一个值重复0次或者更多次。根据这种方法,那么^.[A-Z]+.[a-z]+.可以拆分成部分:^、 .* 、 [A-Z]+ 、 [a-z]+。
^$就不再多说。
.这里要介绍的就是表示前一个值符号重复任意次数。
[A-Z]+中-表示从左边的值到右边的值之间所有值形成的闭集合;[]方括号表示的值必须是括号中间集合的子集,要注意的是括号里面可以有多个集合,比如[A-Z0-9a-z]表示匹配任意一个大小写字母或数字;+同*有点像,但是+表示的是至少一个的重复值。
结合上面的解析,那么^.[A-Z]+.[a-z]+.*
ps:有一点要注意,上面展示的表达式解析时\d这些特殊符号在我们的代码中多了一个\,这是因为\本身是转义符号,为了保证表达式能正常匹配,我们要给\进行一次转义,所以就变成了\。基本上所有的符号字符都需要转义。
语法/字符说明表
值表达
. 匹配除换行符外的任意字符
\w 匹配字母或者数字的字符
\W 匹配任意不是字母或数字的字符
\s 匹配任意的空白符(空格、制表符、换行符)
\S 匹配任意不是空白符的字符
\d 匹配任意数字
\D 匹配任意非数字的字符
\b 匹配单词的结尾或者开头的字符
\B 匹配任意不是单词结尾或开头的字符
[^x] 匹配任意非x的字符。如[^[a-z]]匹配非小写字母的任意字符
^ 匹配字符串的开头
$ 匹配字符串的结尾
修饰表达
* 匹配重复任意次数
+ 匹配重复一次以上的次数
? 匹配一次或零次
{n} 匹配重复n次
{n,} 匹配重复n次或n次以上
{n,m} 匹配重复最少n次最多m次
除了上面列出的字符外,还有包括表示位置指定等较难运用的其他正则表达式,但上面的字符已经足够我们正常使用了。想了解更多知识可以度娘Google。
代码实操
上面我们只是简单的讲解了正则表达式中各个字符代表的意义,那么在iOS开发中应该怎么使用。对于有意使用正则规则来匹配的开发者,我的建议是封装成为类别方法,一次封装,多次调用。下面用我自己封装的代码进行说明。这些方法通过扩展UITextField方法来实现:
@interface UITextField (LXDValidate)
/! 判断文本框是否为空(非正则表达式)/
- (BOOL)isEmpty;
/! 判断邮箱是否正确/
- (BOOL)validateEmail;
/! 判断验证码是否正确/
- (BOOL)validateAuthen;
/! 判断密码格式是否正确/
- (BOOL)validatePassword;
/! 判断手机号码是否正确/
- (BOOL)validatePhoneNumber;
/! 自己写正则传入进行判断/
- (BOOL)validateWithRegExp: (NSString *)regExp;
@end
方法实现文件:
import “UITextField+LXDValidate.h”
@implementation UITextField (LXDValidate)
- (BOOL)isEmpty
{
return self.text.length == ;
}
- (BOOL)validateEmail
{
return [self validateWithRegExp: @”^[a-zA-Z-]{,}@[a-z-A-Z]{,}\.[a-zA-Z]{,}”];
}
- (BOOL)validateAuthen
{
return [self validateWithRegExp: @”^\d{,}”];
}
- (BOOL)validatePassword
{
NSString * length = @”^\w{,}
NSString * lower = @”^\w*[a-z]+\w*
return [self validateWithRegExp: length] && [self validateWithRegExp: number] && [self validateWithRegExp: lower] && [self validateWithRegExp: upper];
}
- (BOOL)validatePhoneNumber
{
NSString * reg = @”^\d{}$”;
return [self validateWithRegExp: reg];
}
- (BOOL)validateWithRegExp: (NSString *)regExp
{
NSPredicate * predicate = [NSPredicate predicateWithFormat: @”SELF MATCHES %@”, regExp];
return [predicate evaluateWithObject: self.text];
}
@end
以上内容是小编给大家介绍的有关IOS开发常用的正则表达式,希望大家喜欢。
- iOS中正则表达式的使用与了解
- iOS中3种正则表达式的使用与比较
- iOS中3种正则表达式的使用与比较
- iOS中3种正则表达式的使用与比较
- iOS中3种正则表达式的使用与比较
- iOS中3种正则表达式的使用与比较
- [iOS]iOS 中正则表达式的使用
- [正则表达式]iOS中3种正则表达式的使用与比较
- iOS - 正则表达式了解
- iOS中正则表达式的使用
- iOS 中正则表达式的使用
- iOS中正则表达式的使用--NSPredicate
- iOS 中正则表达式的使用
- iOS中正则表达式的使用--NSPredicate
- iOS中NSRegularExpression正则表达式的使用
- iOS开发中正则表达式的使用
- iOS中正则表达式的使用--NSPredicate
- IOS开发中正则表达式的使用
- ios返回按钮
- Android jni GetFieldID 和 GetMethodID 函数的说明
- I want to be a nice man
- cf667d 最短路建图 + 枚举 + 最优化剪枝
- Leetcode 100
- iOS中正则表达式的使用与了解
- gdb命令
- Java 与 QtQuick 之 WebSocket
- solr4.7.2时间字段的问题
- 山东省第一届ACM大学生程序设计竞赛 Greatest Number 二分查找
- ViewPager画廊效果
- 重装操作系统后,如何利用原有oracle表空间文件还原数据库
- Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)
- Mac 下的键盘流