123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- //
- // NSString+RegexCategory.h
- // IOS-Categories
- //
- // Created by KevinHM on 15/6/24.
- // Copyright (c) 2015年 KevinHM. All rights reserved.
- // https://github.com/KevinHM
- //
- #import <Foundation/Foundation.h>
- /**
- * 正则表达式简单说明
- * 语法:
- . 匹配除换行符以外的任意字符
- \w 匹配字母或数字或下划线或汉字
- \s 匹配任意的空白符
- \d 匹配数字
- \b 匹配单词的开始或结束
- ^ 匹配字符串的开始
- $ 匹配字符串的结束
- * 重复零次或更多次
- + 重复一次或更多次
- ? 重复零次或一次
- {n} 重复n次
- {n,} 重复n次或更多次
- {n,m} 重复n到m次
- \W 匹配任意不是字母,数字,下划线,汉字的字符
- \S 匹配任意不是空白符的字符
- \D 匹配任意非数字的字符
- \B 匹配不是单词开头或结束的位置
- [^x] 匹配除了x以外的任意字符
- [^aeiou]匹配除了aeiou这几个字母以外的任意字符
- *? 重复任意次,但尽可能少重复
- +? 重复1次或更多次,但尽可能少重复
- ?? 重复0次或1次,但尽可能少重复
- {n,m}? 重复n到m次,但尽可能少重复
- {n,}? 重复n次以上,但尽可能少重复
- \a 报警字符(打印它的效果是电脑嘀一声)
- \b 通常是单词分界位置,但如果在字符类里使用代表退格
- \t 制表符,Tab
- \r 回车
- \v 竖向制表符
- \f 换页符
- \n 换行符
- \e Escape
- \0nn ASCII代码中八进制代码为nn的字符
- \xnn ASCII代码中十六进制代码为nn的字符
- \unnnn Unicode代码中十六进制代码为nnnn的字符
- \cN ASCII控制字符。比如\cC代表Ctrl+C
- \A 字符串开头(类似^,但不受处理多行选项的影响)
- \Z 字符串结尾或行尾(不受处理多行选项的影响)
- \z 字符串结尾(类似$,但不受处理多行选项的影响)
- \G 当前搜索的开头
- \p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
- (?>exp) 贪婪子表达式
- (?<x>-<y>exp) 平衡组
- (?im-nsx:exp) 在子表达式exp中改变处理选项
- (?im-nsx) 为表达式后面的部分改变处理选项
- (?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
- (?(exp)yes) 同上,只是使用空表达式作为no
- (?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
- (?(name)yes) 同上,只是使用空表达式作为no
-
- 捕获
- (exp) 匹配exp,并捕获文本到自动命名的组里
- (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
- (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
- 零宽断言
- (?=exp) 匹配exp前面的位置
- (?<=exp) 匹配exp后面的位置
- (?!exp) 匹配后面跟的不是exp的位置
- (?<!exp) 匹配前面不是exp的位置
- 注释
- (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
-
- * 表达式:\(?0\d{2}[) -]?\d{8}
- * 这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。
- * 我们对它进行一些分析吧:
- * 首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),
- * 最后是8个数字(\d{8})
- */
- #import <Foundation/Foundation.h>
- @interface NSString (RegexCategory)
- /**
- * 手机号码的有效性:分电信、联通、移动和小灵通
- */
- - (BOOL)isMobileNumberClassification;
- /**
- * 手机号有效性
- */
- - (BOOL)isMobileNumber;
- /**
- * 邮箱的有效性
- */
- - (BOOL)isEmailAddress;
- /**
- * 简单的身份证有效性
- *
- */
- - (BOOL)simpleVerifyIdentityCardNum;
- /**
- * 精确的身份证号码有效性检测
- *
- * @param value 身份证号
- */
- + (BOOL)accurateVerifyIDCardNumber:(NSString *)value;
- /**
- * 车牌号的有效性
- */
- - (BOOL)isCarNumber;
- /**
- * 银行卡的有效性
- */
- - (BOOL)bankCardluhmCheck;
- /**
- * IP地址有效性
- */
- - (BOOL)isIPAddress;
- /**
- * Mac地址有效性
- */
- - (BOOL)isMacAddress;
- /**
- * 网址有效性
- */
- - (BOOL)isValidUrl;
- /**
- * 纯汉字
- */
- - (BOOL)isValidChinese;
- /**
- * 邮政编码
- */
- - (BOOL)isValidPostalcode;
- /**
- * 工商税号
- */
- - (BOOL)isValidTaxNo;
- /**
- @brief 是否符合最小长度、最长长度,是否包含中文,首字母是否可以为数字
- @param minLenth 账号最小长度
- @param maxLenth 账号最长长度
- @param containChinese 是否包含中文
- @param firstCannotBeDigtal 首字母不能为数字
- @return 正则验证成功返回YES, 否则返回NO
- */
- - (BOOL)isValidWithMinLenth:(NSInteger)minLenth
- maxLenth:(NSInteger)maxLenth
- containChinese:(BOOL)containChinese
- firstCannotBeDigtal:(BOOL)firstCannotBeDigtal;
- /**
- @brief 是否符合最小长度、最长长度,是否包含中文,数字,字母,其他字符,首字母是否可以为数字
- @param minLenth 账号最小长度
- @param maxLenth 账号最长长度
- @param containChinese 是否包含中文
- @param containDigtal 包含数字
- @param containLetter 包含字母
- @param containOtherCharacter 其他字符
- @param firstCannotBeDigtal 首字母不能为数字
- @return 正则验证成功返回YES, 否则返回NO
- */
- - (BOOL)isValidWithMinLenth:(NSInteger)minLenth
- maxLenth:(NSInteger)maxLenth
- containChinese:(BOOL)containChinese
- containDigtal:(BOOL)containDigtal
- containLetter:(BOOL)containLetter
- containOtherCharacter:(NSString *)containOtherCharacter
- firstCannotBeDigtal:(BOOL)firstCannotBeDigtal;
- /**
- * 密码格式
- */
- - (BOOL)isValidPasswordFomatter;
- /**
- * 昵称校验
- */
- - (BOOL)isValidNickName;
- @end
|