美文网首页
OC-正则表达式-(第二篇)

OC-正则表达式-(第二篇)

作者: Wang99 | 来源:发表于2017-08-11 09:04 被阅读0次

    1.在做app注册页面的时候,需要判断手机号是否格式正确,是否够11位。

    2.在做意见反馈的时候,需要判断邮箱格式是否正确。

    下面就让我们开始了解一下正则表达式与谓词:

    一、基本概念

    1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。 正则表达式可以检测 给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分。它可以 迅速地用极简单的方式达到字符串的复杂控制。

    2.什么是谓词 Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取。 我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据。

    二、案例验证邮箱

    (BOOL)validateEmail:(NSString *)email{ NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; return [emailTest evaluateWithObject:email];}

    三、常用的一些正则 (以下正则表达式来自百度百科)

    1.验证用户名和密码:”^[a-zA-Z]\w{5,15}$”

    2.验证电话号码:(”^([\d{3,4}-)\d{7,8}$](file:///d%7B3,4%7D-)//d%7B7,8%7D$)”)eg:021-68686868 0511-6868686;

    3.验证手机号码:”^1[3|4|5|7|8][0-9]\d{8}$”:

    4.验证身份证号(15位或18位数字):”\d{14}[[0-9],0-9xX]”;

    5.验证Email地址:(“^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$”)

    6.只能输入由数字和26个英文字母组成的字符串:(“^[A-Za-z0-9]+$”) ;

    7.整数或者小数:^[0-9]+([.]{0,1}[0-9]+){0,1}$

    8.只能输入数字:”^[0-9]$”。

    9.只能输入n位的数字:”^\d{n}$”。

    10.只能输入至少n位的数字:”^\d{n,}$”。

    11.只能输入m~n位的数字:”^\d{m,n}$”。

    12.只能输入零和非零开头的数字:”^(0|[1-9][0-9])$”。

    13.只能输入有两位小数的正实数:”^[0-9]+(.[0-9]{2})?$”。

    14.只能输入有1~3位小数的正实数:”^[0-9]+(.[0-9]{1,3})?$”。

    15.只能输入非零的正整数:”^+?[1-9][0-9]$”。

    16.只能输入非零的负整数:”^-[1-9][]0-9″$。

    17.只能输入长度为3的字符:”^.{3}$”。

    18.只能输入由26个英文字母组成的字符串:”^[A-Za-z]+$”。

    19.只能输入由26个大写英文字母组成的字符串:”^[A-Z]+$”。

    20.只能输入由26个小写英文字母组成的字符串:”^[a-z]+$”。

    21.验证是否含有%&',;=?$\”等字符:”[%&',;=?$\x22]+”。

    22.只能输入汉字:”^[\u4e00-\u9fa5]{0,}$”。

    23.验证URL:”^http://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$”。

    24.验证一年的12个月:”^(0?[1-9]|1[0-2])$”正确格式为:”01″~”09″和”10″~”12″。

    25.验证一个月的31天:”^((0?[1-9])|((1|2)[0-9])|30|31)$”正确格式为;”01″~”09″、”10″~”29″和“30”~“31”。

    26.获取日期正则表达式:[\d{4](file:///d%7B4)}[年|-|.]\d{\1-\12}[月|-|.]\d{\1-\31}日?评注:可用来匹配大多数年月日信息。

    27.匹配双字节字符(包括汉字在内):[^\x00-\xff]评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

    28.匹配空白行的正则表达式:\n\s\r 评注:可以用来删除空白行

    29.匹配HTML标记的正则表达式:<(\S?){FNXX==XXFN}>.?|<.? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

    30.匹配首尾空白字符的正则表达式:^\s|\s$ 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

    31.匹配网址URL的正则表达式:[a-zA-z]+://[^\s]评注:网上流传的版本功能很有限,上面这个基本可以满足需求32.匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:表单验证时很实用

    33.匹配腾讯QQ号:[1-9][0-9]{4,}  评注:腾讯QQ号从10 000 开始

    34.匹配中国邮政编码:[1-9]\d{5}(?!\d) 评注:中国邮政编码为6位数字

    35.匹配ip地址:((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。

    学习网站:

    1.iOS 正则表达式之---谓词http://www.cnblogs.com/crazystonelxl/p/5545322.html

    2.OC学习篇之---谓词(NSPredicate)http://blog.csdn.net/jiangwei0910410003/article/details/41923507

    3.验证手机号--详细的判断方法http://www.wtoutiao.com/p/h55el9.html

    4.正则表达式在ios中应用http://www.jb51.net/article/72113.htm

    5.用正则表达式验证信息是否正确http://www.jianshu.com/p/84d5d37f2996

    6.【正则表达式】正则表达式介绍http://www.jianshu.com/p/d332e9fe33f3

    很多网站都很详细,像谓词的数组删选,以及谓词与正则表达式的配合都有,挑选一些网站。以便后续查找方便,利用查阅。

    补充:

    匹配网址URL的正则表达式

    @"(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(/[/][a-zA-Z0-9\.\,\?\'\\/\+&%\$\=~_\-@])$"

    在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码

    正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

    -在很多文本编辑器里,可以使用正则表达式进行检索,Xcode同样支持正则表达式!

    -几乎所有的程序设计语言都支持正则表达式,例如:OC,Java,c#,Pythonjs等。

    0>匹配

    (pattern)匹配pattern并获取这一匹配,所获取的匹配可以从产生的Matches集合得到

    1>常用元字符

    .匹配除换行符以外的任意字符

    \w匹配字母或数字或下划线或汉字

    \s匹配任意的空白符(空格、TAB\t、回车\r \n)

    \d 匹配数字

    ^匹配字符串的开始

    $匹配字符串的结束

    \b匹配单词的开始或结束

    2>常用反义符

    \W匹配任意不是字母,数字,下划线,汉字的字符

    \S匹配任意不是空白符的字符

    \D匹配任意非数字的字符

    \B匹配不是单词开头或结束的位置

    [^x]匹配除了x以外的任意字符

    [^aeiou]匹配除了aeiou这几个字母以外的任意字符

    3>集合

    [xyz] 字符集合

    [^xyz] 负值字符集合

    [a-z] 字符范围

    [^a-z] 负值字符范围

    4>常用限定符

    重复零次或更多次

    +重复一次或更多次

    ?重复零次或一次

    {n} 重复n次

    {n,} 重复n次或更多次

    {n,m} 重复n到m次

    5>贪婪和懒惰

    *?重复任意次,但尽可能少重复

    *+重复1次或更多次,但尽可能少重复

    ??重复0次或1次,但尽可能少重复

    {n,m}?重复n到m次,但尽可能少重复

    {n,}?重复n次以上,但尽可能少重复

    作者:ALienOcer

    链接:http://www.jianshu.com/p/ce7389d58a8e

    來源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:OC-正则表达式-(第二篇)

          本文链接:https://www.haomeiwen.com/subject/jgqlrxtx.html