ios正则表达式

#pragma mark -验证手机号码的正则表达式

- (BOOL)checkTel:(NSString *)str

{

if ([str length] == 0) {

UIAlertView *alert  = [[UIAlertView alloc] initWithTitle:@"手机号不能为空" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alert  show];

return NO;

}

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

NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];    BOOL isMatch = [pred evaluateWithObject:str];

if (!isMatch) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"请输入正确的手机号码" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alert show];

return NO;

}

return YES;

}

#pragma mark -邮箱验证

-(BOOL)isValidateEmail:(NSString *)email

{

NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];

return [emailTest evaluateWithObject:email];

}

#pragma mark - 验证***是否合法

-(BOOL) chk18PaperId:(NSString *) sPaperId

{

//判断位数

if ([sPaperId length] != 15 && [sPaperId length] != 18) {

return NO;

}

NSString *carid = sPaperId;

long lSumQT =0;

//加权因子

int R[] ={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };

//校验码

unsigned char sChecker[11]={‘1‘,‘0‘,‘X‘, ‘9‘, ‘8‘, ‘7‘, ‘6‘, ‘5‘, ‘4‘, ‘3‘, ‘2‘};

//将15位***号转换成18位

NSMutableString *mString = [NSMutableString stringWithString:sPaperId];

if ([sPaperId length] == 15) {

[mString insertString:@"19" atIndex:6];

long p = 0;

const char *pid = [mString UTF8String];

for (int i=0; i<=16; i++)

{

p += (pid[i]-48) * R[i];

}

int o = p%11;

NSString *string_content = [NSString stringWithFormat:@"%c",sChecker[o]];

[mString insertString:string_content atIndex:[mString length]];

carid = mString;

}

//判断地区码

NSString * sProvince = [carid substringToIndex:2];

if (![self areaCode:sProvince]) {

return NO;

}

//判断年月日是否有效

//年份

int strYear = [[self getStringWithRange:carid Value1:6 Value2:4] intValue];

//月份

int strMonth = [[self getStringWithRange:carid Value1:10 Value2:2] intValue];

//日

int strDay = [[self getStringWithRange:carid Value1:12 Value2:2] intValue];

NSTimeZone *localZone = [NSTimeZone localTimeZone];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

[dateFormatter setTimeZone:localZone];

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate *date=[dateFormatter dateFromString:[NSString stringWithFormat:@"%d-%d-%d 12:01:01",strYear,strMonth,strDay]];

if (date == nil) {

return NO;

}

const char *PaperId  = [carid UTF8String];

//检验长度

if( 18 != strlen(PaperId)) return -1;

//校验数字

for (int i=0; i<18; i++)

{

if ( !isdigit(PaperId[i]) && !((‘X‘ == PaperId[i] || ‘x‘ == PaperId[i]) && 17 == i) )

{

return NO;

}

}

//验证最末的校验码

for (int i=0; i<=16; i++)

{

lSumQT += (PaperId[i]-48) * R[i];

}

if (sChecker[lSumQT%11] != PaperId[17] )

{

return NO;

}

return YES;

}

/**

* 功能:判断是否在地区码内

* 参数:地区码

*/

-(BOOL)areaCode:(NSString *)code

{

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];

[dic setObject:@"北京" forKey:@"11"];

[dic setObject:@"天津" forKey:@"12"];

[dic setObject:@"河北" forKey:@"13"];

[dic setObject:@"山西" forKey:@"14"];

[dic setObject:@"内蒙古" forKey:@"15"];

[dic setObject:@"辽宁" forKey:@"21"];

[dic setObject:@"吉林" forKey:@"22"];

[dic setObject:@"黑龙江" forKey:@"23"];

[dic setObject:@"上海" forKey:@"31"];

[dic setObject:@"江苏" forKey:@"32"];

[dic setObject:@"浙江" forKey:@"33"];

[dic setObject:@"安徽" forKey:@"34"];

[dic setObject:@"福建" forKey:@"35"];

[dic setObject:@"江西" forKey:@"36"];

[dic setObject:@"山东" forKey:@"37"];

[dic setObject:@"河南" forKey:@"41"];

[dic setObject:@"湖北" forKey:@"42"];

[dic setObject:@"湖南" forKey:@"43"];

[dic setObject:@"广东" forKey:@"44"];

[dic setObject:@"广西" forKey:@"45"];

[dic setObject:@"海南" forKey:@"46"];

[dic setObject:@"重庆" forKey:@"50"];

[dic setObject:@"四川" forKey:@"51"];

[dic setObject:@"贵州" forKey:@"52"];

[dic setObject:@"云南" forKey:@"53"];

[dic setObject:@"西藏" forKey:@"54"];

[dic setObject:@"陕西" forKey:@"61"];

[dic setObject:@"甘肃" forKey:@"62"];

[dic setObject:@"青海" forKey:@"63"];

[dic setObject:@"宁夏" forKey:@"64"];

[dic setObject:@"新疆" forKey:@"65"];

[dic setObject:@"台湾" forKey:@"71"];

[dic setObject:@"香港" forKey:@"81"];

[dic setObject:@"澳门" forKey:@"82"];

[dic setObject:@"国外" forKey:@"91"];

if ([dic objectForKey:code] == nil) {

return NO;

}

return YES;

}

/**

* 功能:获取指定范围的字符串

* 参数:字符串的开始小标

* 参数:字符串的结束下标

*/

-(NSString *)getStringWithRange:(NSString *)str Value1:(NSInteger)value1 Value2:(NSInteger )value2;

{

return [str substringWithRange:NSMakeRange(value1,value2)];

}

时间: 2024-10-13 15:34:16

ios正则表达式的相关文章

iOS正则表达式判断密码

iOS 正则表达式 不能全部为数字 不能全部为字母 必须包含字母和数字 6-20位 -(BOOL)checkPassWord { //6-20位数字和字母组成 NSString *regex = @"^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$"; NSPredicate * pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; if ([p

iOS 正则表达式(二)

下面介绍的是iOS的一个第三方库,RegexKitLite .使用起来是非常方便的,不过是2008年写的,MAC模式,我们在使用的时候,需要作两步操作. RegexKitLite 导入 我们在githud中下载下来,将RegexKitLite.h 和 RegexKitLite.m 添加到项目中. 1.让RegexKitLite支持ARC,使用 -fno-objc-arc 标记即可. 2.导入libicucore.tbd动态库 RegexKitLite 使用 1.单个正则符合匹配,返回匹配集合 (

iOS 正则表达式使用的三种方式&amp;语法

一.正则表达式定义 正则表达式:又称规则表达式(英语:Regular Expression,在代码中常简写为regex.regexp或RE,是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 二.特点 灵活性.逻辑性和功能性非常的强 可以迅速地用极简单的方式达到字符串的复杂控制 对于刚接触的人来说,比较晦涩难懂. 三.基本语法 选择 | 竖直分隔符代表选择.例

iOS正则表达式运用

一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式达到字符串的复杂控制. 二.正则表达式的语法 看一个过滤纯数字的例子 - (BOOL)validateNumber:(NSString *) textString { NSString* [email protected]"^[0-9]+$"; NSPredicate *numberPre

iOS正则表达式解读

一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式达到字符串的复杂控制. 二.正则表达式的语法 看一个过滤纯数字的例子 - (BOOL)validateNumber:(NSString *) textString { NSString* [email protected]"^[0-9]+$"; NSPredicate *numberPre

ios 正则表达式

常用正则表达式: 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:ns*r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 匹配首尾空白字符的正则表达式:^s*|s*$ 评注:可以用来删除行首行尾的空白字符(包括空格.制表符.换页

iOS正则表达式 验证用户名密码

- (BOOL)checkUsername { NSString * regex = @"^[A-Za-z0-9]{1,15}$"; //正则表达式 NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; //Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取 BOOL isMatch = [pre

iOS 正则表达式判断手机号,邮箱等

1 #import "NSString+RegexCategory.h" 2 3 @implementation NSString (RegexCategory) 4 #pragma mark - 正则相关 5 - (BOOL)isValidateByRegex:(NSString *)regex{ 6 NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex]; 7 r

iOS正则表达式NSRegularExpression

有时候我们可能想从网页上自己想要的数据摘取下来,此时一般我们可以使用正则表达式(NSRegularExpression).扫描器(NSScanner)两种途径解析. 在使用正则表达式的时候,如果需要解析HTML网页源码,使用NSRegularExpression的matchesInString方法解析可能只会返回一个结果,这是由于遇到换行符所导致,此时只需将.替换成[\\s\\S],小括号的意思是取出中间括号内匹配到的部分,其NSRange值将会在结果中返回.返回的result(NSTextCh