55分钟学会正则表达式(译)

http://doslin.com/regular%20expressions/2014/03/11/learn-regular-expressions-in-about-55-minutes.html


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    //[self checkNumber:@"a55b2c9"];
    //[self checkChar:@"a55b2c9"];
//    [self checkPassword:@"a55b2c9"];
//    [self checkPassword:@"Q55b2c9"];
//    [self checkPassword:@"5b2cF9"];
    NSLog(@"rs:%@",[self regularPattern:@"5b2Cf9" pattern:@"([a-z]+)&([A-Z]+)&([0-9]+)"]?@"YES":@"NO");
    return YES;
}

//字母、数字
//至少包含一个大写字母、一个小写
//长度为6-8
- (void)checkPassword:(NSString *)networkKey
{
    BOOL result = ([self regularPattern:networkKey pattern:@"[a-zA-Z0-9]{6,8}"]&&
                   [self regularPattern:networkKey pattern:@"[A-Z]{1}"]&&
                   [self regularPattern:networkKey pattern:@"[a-z]{1}"]&&
                   [self regularPattern:networkKey pattern:@"[0-9]{1}"]
                  );
    NSLog(@"rs:%@",result?@"YES":@"NO");
}

- (BOOL) regularPattern:(NSString *)content pattern:(NSString *)pattern
{
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
    NSArray *result = [regex matchesInString:content options:NSMatchingReportProgress range:NSMakeRange(0, [content length])];
    return [result count]>0?YES:NO;
}

//统计两个连续的数字
- (void)check1:(NSString *)str
{
    //[] 只会查找内部的某一个字符而已
    //统计两个连续的数字
    //方法一:
    //NSString *pattern = @"[0-9][0-9]";
    
    //方法二:d:代表数字, \\表示转义
    //NSString *pattern = @"\\d\\dd";
    
    //方法三:d:代表数字, \\表示转义
    NSString *pattern = @"\\d{2}";//@"\\d{2}a{2}":代表连续三个数字两个a
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}

//编计数字
- (void)checkNumber:(NSString *)str
{
    //[] 只会查找内部的某一个字符而已
    //以下两种写法都可,前一个是简写
    //NSString *pattern = @"[0-9]";
    NSString *pattern = @"[0123456789]";
     //1,创建正则表达式
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}

//编计字母
- (void)checkChar:(NSString *)str
{
    //[] 只会查找内部的某一个字符而已
    NSString *pattern = @"[a-zA-Z]";
    //1,创建正则表达式
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}

//数字的个数必须是2-4
- (void)check2:(NSString *)str
{
    NSString *pattern = @"\\d{2,4}";//@"34561" :只会返回1 因为正则表达的匹配比较贪婪,按最长的算
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}

// ?  表示0个或1个
// +  表示至少一个
// *  表示0个或多个
// ^  以什么开头,如  @"^\\d"  表示以数字开头
// $  以什么结尾  如 @"\\d$"  表示以数字结尾
// .  表示任意东西
- (void)check3:(NSString *)str
{
    NSString *pattern = @"\\d?";
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}

//以数字开头
- (void)check4:(NSString *)str
{
    NSString *pattern = @"^\\d{3}";//必须以3个数字开头
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}

//以数字开头和结尾
- (void)check5:(NSString *)str
{
    NSString *pattern = @"^\\d[a-zA-Z0-9]*\\d$";//必须以数字开头和结尾,中间可以是0个或多个字符
    //NSString *pattern = @"^\\d.\\d$";//必须以数字开头和结尾,中间只能是1个任意的字符
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}

//验证QQ:
//不能以0开头
//全部是数字
//5-11个数字
- (void)check6:(NSString *)str
{
    NSString *pattern = @"^[1-9]\\d{4,10}$";
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}

//验证手机:
//全部是数字
//11个数字
//以 13,15,17,18开头
- (void)check7:(NSString *)str
{
    NSString *pattern = @"^[1][3578]\\d{9}$";//11-2=9
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}

//判断ip
//中间三个.
//1-3个数字
- (void)check8:(NSString *)str
{
    //以什么开头,什么结尾 : @"^$"
    //@"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"   特殊字符必须转义 ,如:. ,需要表示成:\\.
    NSString *pattern = @"^$";//
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%zd",result.count);
}
//JavaScript 的正则表达式:以 /中间的正则/ ,如果需要修改成oc,只需要将去掉首尾即可

//以字母开头
- (void)check9:(NSString *)str
{
    NSString *pattern = @"^[A-Z|a-z]{1}[a-zA-Z0-9]*";
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%@ %zd",str,result.count);
}

//判断以中文中文开头:\\u4e00-\\u9fa5
- (void)check10:(NSString *)str
{
    NSString *pattern = @"[\\u4e00-\\u9fa5]";
    NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:nil error:nil];
    NSArray *result = [regex matchesInString:str options:nil range:NSMakeRange(0, [str length])];
    NSLog(@"%@ %zd",str,result.count);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值