iOS-正则表达式

比较官方的文档教程
正则表达式

^  :  开始符号
$  :  结束符号
( ) : 子表达式

 * : 等价于 {0,}
 ? : 等价于 {0,1}
 + : 等价于 {1,}。

{n} : 固定匹配长度
{n,} : 匹配长度为大于或等于n以上的内容
{n,m} : 匹配长度为n到m之间的内容

[a-z] //匹配所有的小写字母 
[A-Z] //匹配所有的大写字母 
[a-zA-Z] //匹配所有的字母 
[0-9] //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 
[ \f\r\t\n] //匹配所有的白字符

整理:

步骤:
  1.创建正则规则,用于判断
  2.利用规则创建一个正则表达式对象
  3.需要匹配的对象利用正则表达式对象,匹配判断是否符合规则

实例代码:

    /*********    写法一:  *************/
    //创建规则 : 任意数字与字母
    NSString *reg = @"(^[A-Za-z0-9]*$)";
    //利用规则创建一个正则表达式对象
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"self matches %@", reg];
    //需要匹配的对象利用正则表达式对象,匹配判断是否符合规则
    NSLog(@"%d",[pred evaluateWithObject:@"2"]);//如果匹配成功则为1,否则为0
    
    
    /*********    写法二:  *************/
    //创建规则 : 任意数字与字母
    NSString *pattern = @"(^[A-Za-z0-9]*$)"; 
    //创建正则表达式对象
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern
                                                                     options:NSRegularExpressionCaseInsensitive
                                                                       error:nil];
    NSString *compareStr = @"123";
    //开始比较
    NSArray *resultArr = [regex matchesInString:compareStr
                                        options:NSMatchingWithoutAnchoringBounds
                                          range:NSMakeRange(0, compareStr.length)];
    //打印匹配结果
    NSLog(@"resultArr = %@",resultArr);//如果匹配成功数组会有值,否则为空

    ```

匹配的方法有很多,这里简单演示,主要的是创建规则的格式写法.

###基础概念:
* 集合 : [集合元素]
* 示例 : NSString \*pattern = @"(^[abcdefg]$)";
* 理解 : 集合内共有a,b,c,d,e,f,g 7个元素,匹配值匹配单个元素.如果    NSString \*compareStr = @"aa";那么匹配不成功.
* 扩展 : NSString \*pattern = @"(^[abcdefg]$)"
完整写法:NSString \*pattern = @"(^[abcdefg]{0,1}$)", 
简写: NSString \*pattern = @"(^[abcdefg]?$)",
如果要匹配1和或1个字符以上的,在规则后面添加{1,}或者{n,}或者\*或者\+.  (PS : 这里的n>=1)
其实这样就好理解了.

##[匹配规则](http://www.runoob.com/regexp/regexp-rule.html)

###More
判断一个邮件格式:
@".\*@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";

比如 : xxx@qq.com
xxx 对应的是 : .*
@ 对应的是: @
qq. 对应的是 : ([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)
com 对应的是 : [a-zA-Z]{2,}

因为这里([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)
[a-z0-9A-Z]+ : 任意长度字符串
(-[a-z0-9A-Z]+)? : 可选 - 后面再接着任意长度字符串 (这里稍别扭,可以理解为就近先原则,+已经对应了[a-z0-9A-Z],所以?对应的是-,)
\. : . (其实\可以去掉,尝试没有问题)

也就是邮箱格式可以为 :
xxx@qq-qq.com





###常用的正则表达式

1.验证用户名和密码:”^[a-zA-Z]\w{5,15}$”
  2.验证电话号码:(”^(\d{3,4}-)\d{7,8}$”)
  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}[年|-|.]\d{\1-\12}[月|-|.]\d{\1-\31}日?
  评注:可用来匹配大多数年月日信息。
  27.匹配双字节字符(包括汉字在内):[^\x00-\xff]
  评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
  28.匹配空白行的正则表达式:\n\s\r
  评注:可以用来删除空白行
  29.匹配HTML标记的正则表达式:<(\S
?)[^>]>.?</>|<.? />
  评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
  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?)。
  下面给出正则表达式的元字符(来自百度百科)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 一、什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否...
    见哥哥长高了阅读 1,999评论 6 48
  • 一、什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否...
    Helen_kay阅读 2,748评论 0 2
  • iOS中使用正则表达式就不得不提NSRegularExpression,所以我们需要先搞清楚什么是NSRegula...
    sunmumu1222阅读 2,328评论 0 4
  • iOS -正则表达式的简单使用 ✨建议收藏,用到时候一查就明白了 下面两个方法我用的也不是很熟练,如果有懂得朋友欢...
    xx_cc阅读 8,558评论 17 177
  • 看几篇博客,学习一下正则表达式和谓词。方便总结一下,以备后用。做过iOS开发的童鞋们,应该都用过正则表达式。可以帮...
    麦穗0615阅读 2,548评论 10 61