首页 > 移动平台 > 详细

iOS 中的正则匹配(工具类)

时间:2016-01-03 23:58:24      阅读:541      评论:0      收藏:0      [点我收藏+]

正则表达式

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

这个"规则字符串"用来表达对字符串的一种过滤逻辑, 正则表达式就是用于描述这些规则的工具, 或者说, 正则表达式就是记录文本规则的代码.

在开发中, 我们经常会有查找符合某些复杂规则的字符串的需要,

比如数据校验: 判断用户的输入是否合法(如:用户注册的时候,QQ号码,电话号码,邮箱是否符合要求) 

下面让我们先来看看正则匹配常用的一些字符:

一. 常用通配符

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

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

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

\d   匹配数字

^    匹配字符串的开始

$     匹配字符串的结束

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

二. 常用反义通配符

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

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

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

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

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

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

三. 集合

[xyz]  匹配xyz中任意的字符

[^xyz]  匹配不是xyz中的任意字符

[a-z]   匹配从小写字母a到小写字母z之间的任意字符

[^a-z]  匹配非从小写字母a到小写字母z之间的任意字符

四. 常用限定符

*   重复零次或更多次

+  重复一次或更多次

?   重复零次或一次

{n}  重复n次

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

{n,m} 重复n到m次

五. 贪婪和懒惰模式(默认是贪婪模式;在量词后面直接加上问号,就是非贪婪模式)

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

+?   重复一次或更多次,但尽可能少重复

??    重复零次或一次,但尽可能少重复

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

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

 

以上就是正则表达式的匹配规则需要使用到的字符.

下面是我在开发中常用到的和平时收集的一些正则匹配,为了方便,整理下封装成一个工具类,提供类方法来方便调用,返回匹配结果.

可能上面的匹配字符有些朋友看不太明白,那就不说废话了,上代码,多看几次应该就明白了.

- RegularTool.h

 1 //
 2 //  RegularTool.h
 3 //  正则匹配
 4 //
 5 //  Created by Arvin on 15/12/3.
 6 //  Copyright © 2015年 Arvin. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 @interface RegularTool: NSObject
12 
13 /*!
14  *  匹配固定电话号码
15  *
16  *  @param number 需要匹配的固话号码
17  *
18  *  @return 返回匹配结果
19  */
20 + (BOOL)matchTelephoneNumber:(NSString *)number;
21 
22 /*!
23  *  匹配手机号码
24  *
25  *  @param number 需要匹配的手机号码
26  *
27  *  @return 返回匹配结果
28  */
29 + (BOOL)matchMobilephoneNumber:(NSString *)number;
30 
31 /*!
32  *  匹配3-15位的中文或英文(用户名)
33  *
34  *  @param username 需要匹配的字符串
35  *
36  *  @return 返回匹配结果
37  */
38 + (BOOL)matchUsername:(NSString *)username;
39 
40 /*!
41  *  匹配6-18位的数字和字母组合(密码)
42  *
43  *  @param password 需要匹配的字符串
44  *
45  *  @return 返回匹配结果
46  */
47 + (BOOL)matchPassword:(NSString *)password;
48 
49 /*!
50  *  匹配邮箱帐号
51  *
52  *  @param email 需要匹配的邮箱帐号
53  *
54  *  @return 返回匹配结果
55  */
56 + (BOOL)matchEmail:(NSString *)email;
57 
58 /*!
59  *  匹配身份证号码
60  *
61  *  @param idCard 需要匹配的身份证号码
62  *
63  *  @return 返回匹配结果
64  */
65 + (BOOL)matchUserIdCard:(NSString *)idCard;
66 
67 /*!
68  *  匹配URL字符串
69  *
70  *  @param urlStr 需要匹配的URL字符串
71  *
72  *  @return 返回匹配结果
73  */
74 + (BOOL)matchURLStr:(NSString *)urlStr;
75 
76 /*!
77  *  匹配¥:价格字符串
78  *
79  *  @param priceStr 包含价格的字符串
80  *
81  *  @return 返回匹配结果
82  */
83 + (BOOL)matchPriceStr:(NSString *)priceStr;
84 
85 @end

- RegularTool.m

  1 //
  2 //  RegularTool.m
  3 //  正则匹配
  4 //
  5 //  Created by Arvin on 15/12/3.
  6 //  Copyright © 2015年 Arvin. All rights reserved.
  7 //
  8 
  9 #import "RegularTool.h"
 10 
 11 @implementation RegularTool
 12 
 13 #pragma mark - 匹配固定电话号码
 14 + (BOOL)matchTelephoneNumber:(NSString *)number {
 15     NSString *pattern = @"^(\\d{3,4}-)\\d{7,8}$";
 16     return [RegularTool matchString:number withPattern:pattern];
 17 }
 18 
 19 #pragma mark - 匹配手机号码
 20 + (BOOL)matchMobilephoneNumber:(NSString *)number {
 21     NSString *pattern = @"^(0|86)?1([358][0-9]|7[678]|4[57])\\d{8}$";
 22     return [RegularTool matchString:number withPattern:pattern];
 23 }
 24 
 25 #pragma mark - 匹配3-15位的中文或英文(用户名)
 26 + (BOOL)matchUsername:(NSString *)username {
 27     NSString *pattern = @"^[a-zA-Z一-龥]{3,15}$";
 28     return [RegularTool matchString:username withPattern:pattern];
 29 }
 30 
 31 #pragma mark - 匹配6-18位的数字和字母组合(密码)
 32 + (BOOL)matchPassword:(NSString *)password {
 33     NSString *pattern = @"^(?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{6,18}$";
 34     return [RegularTool matchString: password withPattern: pattern];
 35 }
 36 
 37 #pragma mark - 匹配邮箱帐号
 38 + (BOOL)matchEmail:(NSString *)email {
 39     NSString *pattern =
 40     @"^[a-z0-9]+([\\._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+\\.){1,63}[a-z0-9]+$";
 41     return [RegularTool matchString:email withPattern:pattern];
 42 }
 43 
 44 #pragma mark - 匹配身份证号码
 45 + (BOOL)matchUserIdCard:(NSString *)idCard {
 46     NSString *pattern =
 47     @"(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)";
 48     return [RegularTool matchString:idCard withPattern:pattern];
 49 }
 50 
 51 #pragma mark - 匹配URL字符串
 52 + (BOOL)matchURLStr:(NSString *)urlStr {
 53     NSString *pattern = @"^[0-9A-Za-z]{1,50}$";
 54     return [RegularTool matchString:urlStr withPattern: pattern];
 55 }
 56 
 57 #pragma mark - 匹配¥:价格字符串
 58 + (BOOL)matchPriceStr:(NSString *)priceStr {
 59     NSError *error = nil;
 60     NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:@"¥(\\d+(?:\\.\\d+)?)" options: 1 << 0 error: &error];
 61     if (!error) {
 62         NSArray<NSTextCheckingResult *> *result = [regular matchesInString:priceStr options:NSMatchingWithoutAnchoringBounds range:NSMakeRange(0, priceStr.length)];
 63         if (result) {
 64             for (NSTextCheckingResult *checkingRes in result) {
 65                 if (checkingRes.range.location == NSNotFound) {
 66                     continue;
 67                 }
 68                 NSLog(@"%@",[priceStr substringWithRange:checkingRes.range]);
 69                 //NSLog(@"%@",[priceStr substringWithRange:[res rangeAtIndex:1]]);
 70             }
 71         }
 72         return YES;
 73     }
 74     NSLog(@"匹配失败,Error: %@",error);
 75     return NO;
 76 }
 77 
 78 
 79 /*!
 80  *  正则匹配
 81  *
 82  *  @param str     匹配的字符串
 83  *  @param pattern 匹配规则
 84  *
 85  *  @return 返回匹配结果
 86  */
 87 + (BOOL)matchString:(NSString *)str withPattern:(NSString *)pattern {
 88     NSError *error = nil;
 89     NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern: pattern options: NSRegularExpressionCaseInsensitive error: &error];
 90     if (!error) {
 91         NSTextCheckingResult *result = [regular firstMatchInString:str options:0 range:NSMakeRange(0, str.length)];
 92         if (result) {
 93             NSLog(@"匹配成功,Result: %@",[str substringWithRange:result.range]);
 94             return YES;
 95         }
 96     }
 97     NSLog(@"匹配失败,Error: %@",error);
 98     return NO;
 99 }
100 
101 @end

end! 欢迎留言交流,一起学习...

iOS 中的正则匹配(工具类)

原文:http://www.cnblogs.com/arvin-sir/p/5097391.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!