浅谈iOS应用中的相关正则及验证

1、手机号码的验证正则

正则表达式:

^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$

详细解释

解释:

•^...$:
^:开始

$:结束

中间为要处理的字串

•(13[0-9]): 以13开头接下来一位为0-9之间的数
13 : 以13开头

[0-9]:分割语法,13后面是0-9之间的数

•| : 或(or), 将前后两个匹配条件进行or运算

• (15[^4\\D]) : 以15开头接下来一位是除4之外的0-9数字
15 : 以15开头

[^4\\D] : 除了4之外的所有0-9的数字

^:此处为非 ^4 为除4之外的任何字符

\D: \D为非数字 `\`为转义字符

•(18[0,2,5-9]) : 以18开头接下来一位为0或者2或者5-9之间的数

•\d{8} : 8个0-9的数字
\d:0-9之间的数字

{8} : 匹配8次

正则表达式的使用:

+ (BOOL)isMobileNumber:(NSString *)mobileNumber

{

  //手机号以13, 15,18开头,八个 \d 数字字符

  NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";

  NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];

  return [phoneTest evaluateWithObject:mobileNumber]; 

}

2、身份证验证

/**

 * 身份证号

 * @param NSString 身份证号字符串

 * @return 是否身份证号

 * d{14} 14位数字

 */

+ (BOOL) validateIdentityCard: (NSString *)identityCard

{

   BOOL flag;

  if (identityCard.length <= 0) {

    flag = NO;

    return flag;

  }

  NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";

  NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];

  return [identityCardPredicate evaluateWithObject:identityCard];

}
/**

 * 精确验证身份证号

 * @param IdentityNum 身份证号 

 * @return 是否是身份证号

 */

+(BOOL)isValidWithIdentityNum:(NSString *)IdentityNum{

  //先正则匹配

  //......

  //计算最后一位余数

  NSArray *arrExp = [NSArray arrayWithObjects:@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2", nil];

  NSArray *arrVaild = [NSArray arrayWithObjects:@"1", @"0", @"X", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2", nil];

  long sum = 0;

  for (int i = 0; i < (IdentityNum.length -1); i++) {

    NSString * str = [IdentityNum substringWithRange:NSMakeRange(i, 1)];

    sum += [str intValue] * [arrExp[i] intValue];

  }

  int idx = (sum % 11);

  if ([arrVaild[idx] isEqualToString:[IdentityNum substringWithRange:NSMakeRange(IdentityNum.length - 1, 1)]]) {

    return YES;

  }else{

    return NO;

  }

  return YES;

}

3、邮箱验证

/**

 * 验证邮箱

 *

 * @param email 邮箱字符串

 *

 * @return 是否邮箱

 *

 * [A-Z0-9a-z] 表示 A-Z 与 0-9 与 a-z 任意一个

 * {2,4}    表示 字符位大于2个,小于4个

 */

+ (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];

}

4、用户名验证

/**

 * 用户名验证

 *

 * @param NSString 用户名字符串

 *

 * @return 是否用户名

 * {6,20} 6到20位

 */

+ (BOOL) validateUserName:(NSString *)name

{

  NSString *userNameRegex = @"^[A-Za-z0-9]{6,20}+$";

  NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];

  BOOL B = [userNamePredicate evaluateWithObject:name];

  return B;

}

5、密码认证

/**

 * 密码认证

 *

 * @param NSString 密码字符串

 *

 * @return 是否密码

 * {6,20} 6到20位

 */

+ (BOOL) validatePassword:(NSString *)passWord

{

  NSString *passWordRegex = @"^[a-zA-Z0-9]{6,20}+$";

  NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passWordRegex];

  return [passWordPredicate evaluateWithObject:passWord];

}

6、验证昵称

/**

 * 验证昵称

 *

 * @param NSString 昵称字符串

 *

 * @return 是否昵称

 * {4,8} 4到8位

 */

+ (BOOL) validateNickname:(NSString *)nickname

{

  NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{4,8}$";

  NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];

  return [passWordPredicate evaluateWithObject:nickname];

}

6、4位验证码验证

/**

 * 4位验证码

 *

 * @param verifyCode 验证码

 *

 * @return 是否是验证码

 */

+ (BOOL) validateVerifyCode:(NSString *)verifyCode

{

  BOOL flag;

  if (verifyCode.length <= 0) {

    flag = NO;

    return flag;

  }

  NSString *regex2 = @"^(\\d{4})$";

  NSPredicate *verifyCodePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];

  return [verifyCodePredicate evaluateWithObject:verifyCode];

}

以上这篇浅谈iOS应用中的相关正则及验证就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • iOS开发验证判断语句之正则表达式小结

    前言 大家都知道开发一直离不开一些常用验证格式,比如:邮箱,手机号等等,在开发过程中一般都会新建一个工具类,专门管理这些验证方式,简便开发过程.一般都采用正则表达式的形式来做判断,本文列举一些项目中非常实用的一些正则表达式的判断语句,以后开发起来直接复制粘贴就可以,这样大大节省了开发时间,下面不多说,直接上代码. 一.验证移动手机号: + (BOOL)isMobile:(NSString*)mobile { NSString *regex = @"^1+[34578]+\d{9}";

  • iOS验证手机号的正则表达式

    本文实例为大家分享了iOS正则验证手机号的代码片段,供大家参考,具体内容如下 //判断手机号码格式是否正确 + (BOOL)valiMobile:(NSString *)mobile { mobile = [mobile stringByReplacingOccurrencesOfString:@" "withString:@""]; if (mobile.length != 11) { return NO; }else{ /** * 移动号段正则表达式 */ NS

  • iOS 正则表达式详解

    一.系统自带正则表达式用法 除了正则可以用,还有NSScanner这个类可以达到某些相同的效果 1.创建正则表达式对象 NSString * reg = @"[0-9]+";//字符串正则表达式NSError *error = NULL;//错误对象NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:reg options:NSRegularExpressionCaseInsens

  • 浅谈iOS应用中的相关正则及验证

    1.手机号码的验证正则 正则表达式: ^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$ 详细解释 解释: •^...$: ^:开始 $:结束 中间为要处理的字串 •(13[0-9]): 以13开头接下来一位为0-9之间的数 13 : 以13开头 [0-9]:分割语法,13后面是0-9之间的数 •| : 或(or), 将前后两个匹配条件进行or运算 • (15[^4\\D]) : 以15开头接下来一位是除4之外的0-9数字 15 : 以15开头 [^4\\D

  • 浅谈iOS开发中static变量的三大作用

    (1)先来介绍它的第一条也是最重要的一条:隐藏 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说明.我们要同时编译两个源文件,一个是a.c,另一个是main.c. 下面是a.c的内容 char a = 'A'; // global variable void msg() { printf("Hello\n"); } 下面是main.c的内容 int main(void) { extern char a; // extern v

  • 浅谈iOS中几个常用协议 NSCopying/NSMutableCopying

    1.几点说明 说到NSCopying和NSMutableCopying协议,不得不说的就是copy和mutableCopy. 如果类想要支持copy操作,则必须实现NSCopying协议,也就是说实现copyWithZone方法; 如果类想要支持mutableCopy操作,则必须实现NSMutableCopying协议,也就是说实现mutableCopyWithZone方法; iOS系统中的一些类已经实现了NSCopying或者NSMutableCopying协议的方法,如果向未实现相应方法的系

  • 浅谈IOS屏幕刷新ADisplayLink

    什么是CADisplayLink 我们在应用中创建一个新的CADisplayLink对象,把它添加到一个runloop中,并给它提供一个target和selector在屏幕刷新的时候调用. 一但CADisplayLink以特定的模式注册到runloop之后,每当屏幕需要刷新的时候,runloop就会调用CADisplayLink绑定的target上的selector,这时target可以读到CADisplayLink的每次调用的时间戳,用来准备下一帧显示需要的数据.例如一个视频应用使用时间戳来计

  • 浅谈IOS如何对app进行安全加固

    防止 tweak 依附 通常来说,我们要分析一个 app,最开始一般是砸壳, $ DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /path/to/XXX.app/XXX 然后将解密之后的二进制文件扔给类似 hopper 这样的反编译器处理.直接将没有砸壳的二进制文件扔个 hopper 反编译出来的内容是无法阅读的(被苹果加密了).所以说砸壳是破解分析 app 的第一步.对于这一步的防范,有两种方式. 1.限制二进制文件头内的段 通过在 Xcode 里面工程配

  • 浅谈XML Schema中的elementFormDefault属性

    elementFormDefault属性与命名空间相关,其值可设置为qualified或unqualified 如果设置为qualified: 在XML文档中使用局部元素时,必须使用限定短名作为前缀 sean.xsd: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sean=&

  • 浅谈在Java中使用Callable、Future进行并行编程

    使用Callable.Future进行并行编程 在Java中进行并行编程最常用的方式是继承Thread类或者实现Runnable接口.这两种方式的缺点是在任务完成后无法直接获取执行结果,必须通过共享变量或线程间通信,使用起来很不方便. 从Java1.5开始提供了Callable和Future两个接口,通过使用它们可以在任务执行完毕后得到执行结果. 下面我们来学习下如何使用Callable.Future和FutureTask. Callable接口 Callable接口位于java.util.co

  • 浅谈java面向对象中四种权限

    俗话说没有规矩就没有方圆,java作为一门严谨的面向对象的高级编程语言,自然对权限整个重要的问题有严格的控制. Java中,可以通过一些Java关键字,来设置访问控制权限: 主要有 private(私有), package(包访问权限),protected(子类访问权限),public(公共访问权限) 在java里,这些语句都可以修饰类中的成员变量和方法,但是只有public和友好型可以修饰类.举个例子: 接下来就详细解释一下这几种权限的差别(博客最后有表格)按权限由低到高:(高权限有低权限所有

  • 浅谈C语言中的注释风格小结

    C语言中常用的注释风格有两种,一种是通过如下模式进行一段代码的注释: /* comment*/ 另一种是单行注释符号: // comment 学生时代的注释我一般是选用后者,那时候编码量十分有限,即使是简单的小段落注释使用的IDE也支持批量添加单行注释符.而在编码之中,简单的单行注释进行注释的时候键盘的操作更为简单一点. 不过,工作之后接触了相应的编码规范之后,C语言的注释我基本上放弃了单行注释的方法,最多仅仅在调试的时候做简单的使用. 其实,单行注释是从C++中借鉴来的,算是C++风格的注释方

  • 浅谈C/C++中指针和数组的不同

    这边先简单介绍一下内存分区. 内存按照用途划分为五个区: 1.栈区:由系统控制分配和回收. 例如定义变量 int x = 0; int *p = NULL; 变量所占的内存都是分配在栈区的. 2.堆区:由程序员管理. 在C语言中由 malloc 申请的内存,或者在C++中,用 new 申请的内存,是在堆区中申请的.用完之后需要程序员自己回收,否则会造成内存泄漏. 3.全局区:存储全局变量及静态变量 4.常量区:存储常量. 5.代码区:存储编译之后的二进制代码. 数组和指针具有很大的相似性,实际上

随机推荐