Mario洁 发表于 2018-4-20 14:46:29

iOS常用正则表达式的完成

为什么要做这件事

做事情总得有些理由才能持久的执行下去,因为最近学习html5语言,常规使用的很多信息需要表单来进行提交。
当提交需要的表单时,你需要对每一个textfield的内容进行相对应的校验,当校验通过,则提交这个表单。
从html5引申而来,觉得很好用,继而查询关于c语音封装的正则表达式和java相关的表达式,基本上都是一致的。

精益求精咯~把学习过的东西封装成ios 所需要的
这里是我上传的目前我需要的正则表达式相关的内容,demo如下:
若是觉得对您有用,请star下谢谢~
正则表达式

当你需要这些东西的时候,你该如何来进行呢?

学习资料直接百度即可,为了大家查询方便,我这里进行总结一下。
正则表达式

关于封装的关于正则表达式的内容

#pragma mark- 基本类型验证1
/**1.1整形*/
+ (BOOL)isPureInt:(NSString*)string;

/**1.2浮点型*/
+ (BOOL)isPureFloat:(NSString*)string;

/**1.3中文验证*/
+ (BOOL)isChinese:(NSString*)chinese;

#pragma mark-信息验证2

>/**2.1邮箱*/
+ (BOOL)isEmail:(NSString *)email;

/**2.2url验证*/
+ (BOOL)isURL:(NSString*)url;

/**2.3手机号码验证*/
+ (BOOL)isMobile:(NSString *)mobile;

/**2.4车牌号验证*/
+ (BOOL)isCarNo:(NSString *)carNo;

/**2.5车型验证*/
+ (BOOL)isCarType:(NSString *)CarType;

/**2.6匹配邮政编码*/
+ (BOOL)isPostcode:(NSString *)string;

/**2.7匹配ip地址*/
+ (BOOL)isipAddress:(NSString *)string;

/**2.8匹配MAC地址*/
+ (BOOL)ismacAddress:(NSString *)string;

#pragma mark - 用户信息验证

/**3.1用户名*/
+ (BOOL)isUserName:(NSString *)name;

/**3.2密码验证*/
+ (BOOL)isPassword:(NSString *)passWord;

/**3.3昵称验证*/
+ (BOOL)isNickname:(NSString *)nickname;

/**3.4身份证号验证*/
+ (BOOL)isIDCardNumber:(NSString *)IDCardNumber;
引申

正则表达式的起源
正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究。美国新泽西州的Warren
McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描
述神经网络的新方法,他们创造性地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一
项伟大的工作革新。

在1956 年,一位名叫Stephen Kleene的数学科学家,他在Warren McCulloch和Walter Pitts早期工作的基础之
上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,
引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用
了“正则表达式”这个术语。

之后一段时间,人们发现可以将这一工作成果应用于其他方面。Ken Thompson就把这一成果应用于计算
搜索算法的一些早期研究,Ken Thompson是 Unix的主要发明人,也就是大名鼎鼎的Unix之父。Unix之父
将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。Jeffrey Friedl 在其著作《Ma
stering Regular Expressions (2nd edition)》(中文版译作:精通正则表达式,已出到第三版)中对此作了
进一步阐述讲解,如果你希望更多了解正则表达式理论和历史,推荐你看看这本书。

自此以后,正则表达式被广泛地应用到各种UNIX或类似于UNIX的工具中,如大家熟知的Perl。Perl的正则
表达式源自于Henry Spencer编写的regex,之后已演化成了pcre(Perl兼容正则表达式Perl Compatible Re
gular Expressions),pcre是一个由Philip Hazel开发的、为很多现代工具所使用的库。正则表达式的第一
个实用应用程序即为Unix中的 qed 编辑器。
然后,正则表达式在各种计算机语言或各种应用领域得到了广大的应用和发展,演变成为计算机技术森
林中的一只形神美丽且声音动听的百灵鸟。
以上是关于正则表达式的起源和发展的历史描述,如今正则表达式在基于文本的编辑器和搜索工具中依然
占据着一个非常重要的地位。

在最近的六十年中,正则表达式逐渐从模糊而深奥的数学概念,发展成为在计算机各类工具和软件包应用
中的主要功能。不仅仅众多UNIX工具支持正则表达式,近二十年来,在WINDOWS的阵营下,正则表达式
的思想和应用在大部分 Windows 开发者工具包中得到支持和嵌入应用!从正则式在Microsoft Visual Basic
6 或 Microsoft VBScript到.NET Framework中的探索和发展,WINDOWS系列产品对正则表达式的支持发展
到无与伦比的高度,几乎所有 Microsoft 开发者和所有.NET语言都可以使用正则表达式。如果你是一位接触
计算机语言的工作者,那么你会在主流操作系统(*nix、Windows、HP、BeOS等)、主流
的开发语言(delphi、Scala、PHP、C#、Java、C++、Objective-c、Swift、VB、Javascript、Ruby以及Pyt
hon等)、数以亿万计的各种应用软件中,都可以看到正则表达式优美的舞姿。

正则表达式的技巧

实例目录
【1】 正则表达式应用——替换指定内容到行尾
【2】 正则表达式应用——数字替换
【3】 正则表达式应用——删除每一行行尾的指定字符
【4】 正则表达式应用——替换带有半角括号的多行
【5】 正则表达式应用——删除空行
【6】 正则表达式应用——实例应用
应用实例
【1】正则表达式应用——替换指定内容到行尾
原始文本如下面两行
abc aaaaa
123 abc 444
希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg”
即上面的文本最终替换为:
abc efg
123 abc efg
解决:
① 在替换对话框,查找内容里输入“abc.”,替换内容输入为“abc efg”
② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮
其中,符号的含义如下:
“.” =匹配任意字符
“” =匹配0次或更多
注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说
,就可以引申出成千上万种特例。
【2】正则表达式应用——数字替换
希望把
asdadas123asdasdas456asdasdasd789asdasd
替换为:
asdadasasdasdasasdasdasdasdasd
在替换对话框里面,勾选“正则表达式”复选框;
在查找内容里面输入“()()()”,不含引号
“替换为:”里面输入“[\1\2\3]”,不含引号

备注####:查找(+) 替换:[\1] 更简单通用些

范围为你所操作的范围,然后选择替换即可。
实际上这也是正则表达式的使用特例,“”表示匹配0~9之间的任何特例,同样“”就表示匹配a~z
之间的任何特例
上面重复使用了“”,表示连续出现的三个数字
括号用来选择原型,进行分组,替换时要用
“\1”代表第一个“”对应的原型,“\2”代表第二个“”对应的原型,依此类推
“[”|“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它\1\2\3其它”,则替换结果为:
asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd


Mario洁 发表于 2018-4-20 14:46:53

功能增强:
如果将查找内容“”改为“*”,对应1 或 123 或 12345 或 ...
大家根据需要定制
相关内容还有很多,可以自己参考正则表达式的语法仔
【3】正则表达式应用——删除每一行行尾的指定字符
因为这几个字符在行中也是出现的,所以肯定不能用简单的替换实现
比如
12345 1265345
2345
需要删除每行末尾的“345”
这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则
表达式还得有个认识过程,解决方法如下
解决:
在替换对话框中,启用“正则表达式”复选框
在查找内容里面输入“345$”
这里“$”表示从行尾匹配
如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串
a. 选择要操作的行
b. 编辑-格式-删除行注释
c. 在弹出对话框里面输入要清除的行首字符,确定
【4】正则表达式应用——替换带有半角括号的多行
几百个网页中都有下面一段代码:
<script LANGUAGE="JavaScript1.1">

</SCRIPT>
我想把它们都去掉,可是找了很多search & replace的软件,都是只能对“一行”进行操作。
EditPlus 打开几百个网页文件还是比较顺畅的,所以完全可以胜任这个工作。
具体解决方法,在 Editplus 中使用正则表达式,由于“(”、“)”被用做预设表达式(或者可以称作子表达式)的
标志,所以查找
“<script LANGUAGE="JavaScript1.1">\n\n</SCRIPT>\n”
时会提示查找不到,所以也就无法进行替换了,这时可以把“(”、“)”使用任意字符标记替代,即半角句号:“.”
。替换内容为
<script LANGUAGE="JavaScript1.1">\n\n</SCRIPT>\n
在替换对话框启用“正则表达式”选项,这时就可以完成替换了
补充:
对( ) 这样的特殊符号,应该用( )来表示,这也是很标准的regexp语法,可以写为
<script LANGUAGE="JavaScript1.1">\n\n</SCRIPT>\n
【5】正则表达式应用——删除空行
启动EditPlus,打开待处理的文本类型文件。
①、选择“查找”菜单的“替换”命令,弹出文本替换对话框。选中“正则表达式”复选框,表明我们要在查找、替换
中使用正则表达式。然后,选中“替换范围”中的“当前文件”,表明对当前文件操作。
②、单击“查找内容”组合框右侧的按钮,出现下拉菜单。
③、下面的操作添加正则表达式,该表达式代表待查找的空行。(技巧提示:空行仅包括空格符、制表符、回
车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则
表达式)。
直接在"查找"中输入正则表达式“^[ \t]\n”,注意\t前有空格符。
(1)选择“从行首开始匹配”,“查找内容”组合框中出现字符“^”,表示待查找字符串必须出文本中一行的行首。
(2)选择“字符在范围中”,那么在“^”后会增加一对括号“[]”,当前插入点在括号中。括号在正则表达式中表示,
文本中的字符匹配括号中任意一个字符即符合查找条件。
(3)按一下空格键,添加空格符。空格符是空行的一个组成成分。
(4)选择“制表符”,添加代表制表符的“\t”。
(5)移动光标,将当前插入点移到“]”之后,然后选择“匹配 0 次或更多”,该操作会添加星号字符“”。星号表
示,其前面的括号“[]”内的空格符或制表符,在一行中出现0个或多个。
(6)选择“换行符”,插入“\n”,表示回车符。
④、“替换为”组合框保持空,表示删除查找到的内容。单击“替换”按钮逐个行删除空行,或单击“全部替换”按
钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需
要多按几次按钮)。
【6】 正则表达式应用——实例应用
1.验证用户名和密码:("^\w{5,15}$")正确格式:""组成,并且第一个字必须为字母
6~16位;
2.验证电话号码:("^(\d{3,4}-)\d{7,8}$")正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx;
3.验证手机号码:"^1\d{8}$";
4.验证身份证号(15位或18位数字):"\d{14}[,0-9xX]";
5.验证Email地址:("^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$");
6.只能输入由数字和26个英文字母组成的字符串:("^+$");
7.整数或者小数:^+([.]+){0,1}$
8.只能输入数字:"^$"。
9.只能输入n位的数字:"^\d{n}$"。
10.只能输入至少n位的数字:"^\d{n,}$"。
11.只能输入m~n位的数字:"^\d{m,n}$"。
12.只能输入零和非零开头的数字:"^(0|)$"。
13.只能输入有两位小数的正实数:"^+(.{2})?$"。
14.只能输入有1~3位小数的正实数:"^+(.{1,3})?$"。
15.只能输入非零的正整数:"^+?$"。
16.只能输入非零的负整数:"^-$"。
17.只能输入长度为3的字符:"^.{3}$"。
18.只能输入由26个英文字母组成的字符串:"^+$"。
19.只能输入由26个大写英文字母组成的字符串:"^+$"。
20.只能输入由26个小写英文字母组成的字符串:"^+$"。
21.验证是否含有%&',;=?$"等字符:"[%&',;=?$\]+"。
22.只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"。
23.验证URL:"^http://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$"。
24.验证一年的12个月:"^(0?|1)$"正确格式为:"01"~"09"和"10"~"12"。
25.验证一个月的31天:"^((0?)|((1|2))|30|31)$"正确格式为;"01"~"09"、"10"~"29"和“30”~“31”。
26.获取日期正则表达式:\d{4}[年|-|.]\d{\1-\12}[月|-|.]\d{\1-\31}日?
评注:可用来匹配大多数年月日信息。
27.匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
28.匹配空白行的正则表达式:\n\s\r
评注:可以用来删除空白行
29.匹配HTML标记的正则表达式:<(\S?)[^>]>.?</>|<.? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
30.匹配首尾空白字符的正则表达式:^\s|\s$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
31.匹配网址URL的正则表达式:+://[^\s]
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
32.匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^{4,15}$
评注:表单验证时很实用
33.匹配腾讯QQ号:{4,}
评注:腾讯QQ号从10 000 开始
34.匹配中国邮政编码:\d{5}(?!\d)
评注:中国邮政编码为6位数字
35.匹配ip地址:({1,3}.){3}。
评注:提取ip地址时有用
36.匹配MAC地址:({2}:){5}
Function IsRegu(Regu,s)
'正则表达式校验
If Regu="" Then
Exit Function
End if
Dim Re,Sre
Set Re = New RegExp
Re.Pattern = Regu
Sre = Re.Test(s)
If Sre = True Then
IsRegu = True
Else
IsRegu = False
End If
End Function
tmp=" "
if (IsRegu("\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*",tmp )) =false then
msgbox "E-mail地址不合法 !"
FieldCheck#N=false
不同的语言(如PHP和JAVA)、相同语言的不同类库(如来自Sun的Java Regular Expression类库跟Apache
Jakarta的正则表达式类库)间,用法会有所差别,在使用的时候,要注意这些差别。

梦想家 发表于 2018-5-9 16:23:21

:victory:
页: [1]
查看完整版本: iOS常用正则表达式的完成