NSString+RegexCategory.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. //
  2. // NSString+RegexCategory.h
  3. // IOS-Categories
  4. //
  5. // Created by KevinHM on 15/6/24.
  6. // Copyright (c) 2015年 KevinHM. All rights reserved.
  7. // https://github.com/KevinHM
  8. //
  9. #import <Foundation/Foundation.h>
  10. /**
  11. * 正则表达式简单说明
  12. * 语法:
  13. . 匹配除换行符以外的任意字符
  14. \w 匹配字母或数字或下划线或汉字
  15. \s 匹配任意的空白符
  16. \d 匹配数字
  17. \b 匹配单词的开始或结束
  18. ^ 匹配字符串的开始
  19. $ 匹配字符串的结束
  20. * 重复零次或更多次
  21. + 重复一次或更多次
  22. ? 重复零次或一次
  23. {n} 重复n次
  24. {n,} 重复n次或更多次
  25. {n,m} 重复n到m次
  26. \W 匹配任意不是字母,数字,下划线,汉字的字符
  27. \S 匹配任意不是空白符的字符
  28. \D 匹配任意非数字的字符
  29. \B 匹配不是单词开头或结束的位置
  30. [^x] 匹配除了x以外的任意字符
  31. [^aeiou]匹配除了aeiou这几个字母以外的任意字符
  32. *? 重复任意次,但尽可能少重复
  33. +? 重复1次或更多次,但尽可能少重复
  34. ?? 重复0次或1次,但尽可能少重复
  35. {n,m}? 重复n到m次,但尽可能少重复
  36. {n,}? 重复n次以上,但尽可能少重复
  37. \a 报警字符(打印它的效果是电脑嘀一声)
  38. \b 通常是单词分界位置,但如果在字符类里使用代表退格
  39. \t 制表符,Tab
  40. \r 回车
  41. \v 竖向制表符
  42. \f 换页符
  43. \n 换行符
  44. \e Escape
  45. \0nn ASCII代码中八进制代码为nn的字符
  46. \xnn ASCII代码中十六进制代码为nn的字符
  47. \unnnn Unicode代码中十六进制代码为nnnn的字符
  48. \cN ASCII控制字符。比如\cC代表Ctrl+C
  49. \A 字符串开头(类似^,但不受处理多行选项的影响)
  50. \Z 字符串结尾或行尾(不受处理多行选项的影响)
  51. \z 字符串结尾(类似$,但不受处理多行选项的影响)
  52. \G 当前搜索的开头
  53. \p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
  54. (?>exp) 贪婪子表达式
  55. (?<x>-<y>exp) 平衡组
  56. (?im-nsx:exp) 在子表达式exp中改变处理选项
  57. (?im-nsx) 为表达式后面的部分改变处理选项
  58. (?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
  59. (?(exp)yes) 同上,只是使用空表达式作为no
  60. (?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
  61. (?(name)yes) 同上,只是使用空表达式作为no
  62. 捕获
  63. (exp) 匹配exp,并捕获文本到自动命名的组里
  64. (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
  65. (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
  66. 零宽断言
  67. (?=exp) 匹配exp前面的位置
  68. (?<=exp) 匹配exp后面的位置
  69. (?!exp) 匹配后面跟的不是exp的位置
  70. (?<!exp) 匹配前面不是exp的位置
  71. 注释
  72. (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
  73. * 表达式:\(?0\d{2}[) -]?\d{8}
  74. * 这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。
  75. * 我们对它进行一些分析吧:
  76. * 首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),
  77. * 最后是8个数字(\d{8})
  78. */
  79. #import <Foundation/Foundation.h>
  80. @interface NSString (RegexCategory)
  81. /**
  82. * 手机号码的有效性:分电信、联通、移动和小灵通
  83. */
  84. - (BOOL)isMobileNumberClassification;
  85. /**
  86. * 手机号有效性
  87. */
  88. - (BOOL)isMobileNumber;
  89. /**
  90. * 邮箱的有效性
  91. */
  92. - (BOOL)isEmailAddress;
  93. /**
  94. * 简单的身份证有效性
  95. *
  96. */
  97. - (BOOL)simpleVerifyIdentityCardNum;
  98. /**
  99. * 精确的身份证号码有效性检测
  100. *
  101. * @param value 身份证号
  102. */
  103. + (BOOL)accurateVerifyIDCardNumber:(NSString *)value;
  104. /**
  105. * 车牌号的有效性
  106. */
  107. - (BOOL)isCarNumber;
  108. /**
  109. * 银行卡的有效性
  110. */
  111. - (BOOL)bankCardluhmCheck;
  112. /**
  113. * IP地址有效性
  114. */
  115. - (BOOL)isIPAddress;
  116. /**
  117. * Mac地址有效性
  118. */
  119. - (BOOL)isMacAddress;
  120. /**
  121. * 网址有效性
  122. */
  123. - (BOOL)isValidUrl;
  124. /**
  125. * 纯汉字
  126. */
  127. - (BOOL)isValidChinese;
  128. /**
  129. * 邮政编码
  130. */
  131. - (BOOL)isValidPostalcode;
  132. /**
  133. * 工商税号
  134. */
  135. - (BOOL)isValidTaxNo;
  136. /**
  137. @brief 是否符合最小长度、最长长度,是否包含中文,首字母是否可以为数字
  138. @param minLenth 账号最小长度
  139. @param maxLenth 账号最长长度
  140. @param containChinese 是否包含中文
  141. @param firstCannotBeDigtal 首字母不能为数字
  142. @return 正则验证成功返回YES, 否则返回NO
  143. */
  144. - (BOOL)isValidWithMinLenth:(NSInteger)minLenth
  145. maxLenth:(NSInteger)maxLenth
  146. containChinese:(BOOL)containChinese
  147. firstCannotBeDigtal:(BOOL)firstCannotBeDigtal;
  148. /**
  149. @brief 是否符合最小长度、最长长度,是否包含中文,数字,字母,其他字符,首字母是否可以为数字
  150. @param minLenth 账号最小长度
  151. @param maxLenth 账号最长长度
  152. @param containChinese 是否包含中文
  153. @param containDigtal 包含数字
  154. @param containLetter 包含字母
  155. @param containOtherCharacter 其他字符
  156. @param firstCannotBeDigtal 首字母不能为数字
  157. @return 正则验证成功返回YES, 否则返回NO
  158. */
  159. - (BOOL)isValidWithMinLenth:(NSInteger)minLenth
  160. maxLenth:(NSInteger)maxLenth
  161. containChinese:(BOOL)containChinese
  162. containDigtal:(BOOL)containDigtal
  163. containLetter:(BOOL)containLetter
  164. containOtherCharacter:(NSString *)containOtherCharacter
  165. firstCannotBeDigtal:(BOOL)firstCannotBeDigtal;
  166. /**
  167. * 密码格式
  168. */
  169. - (BOOL)isValidPasswordFomatter;
  170. /**
  171. * 昵称校验
  172. */
  173. - (BOOL)isValidNickName;
  174. @end