iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容

所属分类: 网络编程 / 正则表达式 阅读数: 1019
收藏 0 赞 0 分享

何谓正则表达式

正则表达式(regular expression),在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

正则表达式组成

正则表达式有两种类型的字符组成

第一种:用来匹配的字符,或者叫常规字符

第二种:控制字符或具有特殊含义的元字符

iphone 4.0以后就开始支持正则表达式的使用了,在ios4.0中正则表达式的使用是使用NSRegularExpression类来调用。

1. 下面一个简单的使用正则表达式的一个例子:NSRegularExpression 类

-(void)parseString{
//组装一个字符串,需要把里面的网址解析出来
NSString *urlString=@"sfdsfhttp://www.baidu.com";
//NSRegularExpression类里面调用表达的方法需要传递一个NSError的参数。下面定义一个
 NSError *error;
//http+:[^\\s]* 这个表达式是检测一个网址的。
  NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"http+:[^\\s]*" options:0 error:&error];
  if (regex != nil) {
  NSTextCheckingResult *firstMatch=[regex firstMatchInString:urlString options:0range:NSMakeRange(0, [urlString length])];
  if (firstMatch) {
   NSRange resultRange = [firstMatch rangeAtIndex:0]; //等同于 firstMatch.range --- 相匹配的范围
   //从urlString当中截取数据
  NSString *result=[urlString substringWithRange:resultRange];
  //输出结果
  NSLog(@"%@",result);
  }
  }
}

2.使用正则表达式来判断

//初始化一个NSRegularExpression 对象,并设置检测对象范围为:0-9 
NSRegularExpression *regex2 = [NSRegularExpression regularExpressionWithPattern:@"^[0-9]*$" options:0 error:nil];
    if (regex2)
    {//对象进行匹配
       NSTextCheckingResult *result2 = [regex2 firstMatchInString:textField.text options:0 range:NSMakeRange(0, [textField.text length])];
      if (result2) {
      }
}

1.判断邮箱格式是否正确的代码:NSPredicatel类

//利用正则表达式验证

NSPredicatel类:主要用来指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。谓词是指在计算机中表示计算真假值的函数。原理和用法都类似于SQL查询中的where,作用相当于数据库的过滤取。主要用于从集合中分拣出符合条件的对象,也可以用于字符串的正则匹配

-(BOOL)isValidateEmail:(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];
}

2.匹配9-15个由字母/数字组成的字符串的正则表达式:

  NSString * regex = @"^[A-Za-z0-9]{9,15}$";
  NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
  BOOL isMatch = [pred evaluateWithObject:txtfldPhoneNumber.text];

Cocoa用NSPredicate描述查询的方式,原理类似于在数据库中进行查询

用BETWEEN,IN,BEGINWITH,ENDWITH,CONTAINS,LIKE这些谓词来构造NSPredicate,必要的时候使用SELF直接对自己进行匹配

//基本的查询 
NSPredicate *predicate; 
predicate = [NSPredicate predicateWithFormat: @"name == 'Herbie'"]; 
  BOOL match = [predicate evaluateWithObject: car]; 
  NSLog (@"%s", (match) ? "YES" : "NO"); 
//在整个cars里面循环比较 
  predicate = [NSPredicate predicateWithFormat: @"engine.horsepower > 150"]; 
  NSArray *cars = [garage cars]; 
  for (Car *car in [garage cars]) { 
    if ([predicate evaluateWithObject: car]) { 
      NSLog (@"%@", car.name); 
    } 
  } 
//输出完整的信息 
  predicate = [NSPredicate predicateWithFormat: @"engine.horsepower > 150"]; 
  NSArray *results; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", results); 
//含有变量的谓词 
  NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@"name == $NAME"]; 
  NSDictionary *varDict; 
  varDict = [NSDictionary dictionaryWithObjectsAndKeys: 
        @"Herbie", @"NAME", nil]; 
  predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict]; 
  NSLog(@"SNORGLE: %@", predicate); 
  match = [predicate evaluateWithObject: car]; 
 NSLog (@"%s", (match) ? "YES" : "NO"); 
//注意不能使用$VARIABLE作为路径名,因为它值代表值 
//谓词字符窜还支持c语言中一些常用的运算符 
  predicate = [NSPredicate predicateWithFormat: 
         @"(engine.horsepower > 50) AND (engine.horsepower < 200)"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"oop %@", results); 
  predicate = [NSPredicate predicateWithFormat: @"name < 'Newton'"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", [results valueForKey: @"name"]); 
//强大的数组运算符 
  predicate = [NSPredicate predicateWithFormat: 
         @"engine.horsepower BETWEEN { 50, 200 }"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", results); 
  NSArray *betweens = [NSArray arrayWithObjects: 
             [NSNumber numberWithInt: 50], [NSNumber numberWithInt: 200], nil]; 
  predicate = [NSPredicate predicateWithFormat: @"engine.horsepower BETWEEN %@", betweens]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", results); 
  predicateTemplate = [NSPredicate predicateWithFormat: @"engine.horsepower BETWEEN $POWERS"]; 
  varDict = [NSDictionary dictionaryWithObjectsAndKeys: betweens, @"POWERS", nil]; 
  predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", results); 
//IN运算符 
  predicate = [NSPredicate predicateWithFormat: @"name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", [results valueForKey: @"name"]); 
  predicate = [NSPredicate predicateWithFormat: @"SELF.name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", [results valueForKey: @"name"]); 
  names = [cars valueForKey: @"name"]; 
  predicate = [NSPredicate predicateWithFormat: @"SELF IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"]; 
  results = [names filteredArrayUsingPredicate: predicate];//这里限制了SELF的范围 
  NSLog (@"%@", results); 
//BEGINSWITH,ENDSWITH,CONTAINS 
//附加符号,[c],[d],[cd],c表示不区分大小写,d表示不区分发音字符,cd表示什么都不区分 
  predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH 'Bad'"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", results); 
  predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH 'HERB'"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", results); 
  predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH[cd] 'HERB'"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", results); 
//LIKE运算符(通配符) 
  predicate = [NSPredicate predicateWithFormat: @"name LIKE[cd] '*er*'"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", results); 
  predicate = [NSPredicate predicateWithFormat: @"name LIKE[cd] '???er*'"]; 
  results = [cars filteredArrayUsingPredicate: predicate]; 
  NSLog (@"%@", results); 
//基本的查询
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat: @"name == 'Herbie'"];
  BOOL match = [predicate evaluateWithObject: car];
  NSLog (@"%s", (match) ? "YES" : "NO");
//在整个cars里面循环比较
  predicate = [NSPredicate predicateWithFormat: @"engine.horsepower > 150"];
  NSArray *cars = [garage cars];
  for (Car *car in [garage cars]) {
    if ([predicate evaluateWithObject: car]) {
      NSLog (@"%@", car.name);
    }
  }
//输出完整的信息
  predicate = [NSPredicate predicateWithFormat: @"engine.horsepower > 150"];
  NSArray *results;
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", results);
//含有变量的谓词
  NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@"name == $NAME"];
  NSDictionary *varDict;
  varDict = [NSDictionary dictionaryWithObjectsAndKeys:
        @"Herbie", @"NAME", nil];
  predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict];
  NSLog(@"SNORGLE: %@", predicate);
  match = [predicate evaluateWithObject: car];
 NSLog (@"%s", (match) ? "YES" : "NO");
//注意不能使用$VARIABLE作为路径名,因为它值代表值
//谓词字符窜还支持c语言中一些常用的运算符
  predicate = [NSPredicate predicateWithFormat:
         @"(engine.horsepower > 50) AND (engine.horsepower < 200)"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"oop %@", results);
  predicate = [NSPredicate predicateWithFormat: @"name < 'Newton'"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", [results valueForKey: @"name"]);
//强大的数组运算符
  predicate = [NSPredicate predicateWithFormat:
         @"engine.horsepower BETWEEN { 50, 200 }"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", results);
  NSArray *betweens = [NSArray arrayWithObjects:
             [NSNumber numberWithInt: 50], [NSNumber numberWithInt: 200], nil];
  predicate = [NSPredicate predicateWithFormat: @"engine.horsepower BETWEEN %@", betweens];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", results);
  predicateTemplate = [NSPredicate predicateWithFormat: @"engine.horsepower BETWEEN $POWERS"];
  varDict = [NSDictionary dictionaryWithObjectsAndKeys: betweens, @"POWERS", nil];
  predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", results);
//IN运算符
  predicate = [NSPredicate predicateWithFormat: @"name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", [results valueForKey: @"name"]);
  predicate = [NSPredicate predicateWithFormat: @"SELF.name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", [results valueForKey: @"name"]);
  names = [cars valueForKey: @"name"];
  predicate = [NSPredicate predicateWithFormat: @"SELF IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];
  results = [names filteredArrayUsingPredicate: predicate];//这里限制了SELF的范围
  NSLog (@"%@", results);
//BEGINSWITH,ENDSWITH,CONTAINS
//附加符号,[c],[d],[cd],c表示不区分大小写,d表示不区分发音字符,cd表示什么都不区分
  predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH 'Bad'"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", results);
  predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH 'HERB'"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", results);
  predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH[cd] 'HERB'"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", results);
//LIKE运算符(通配符)
  predicate = [NSPredicate predicateWithFormat: @"name LIKE[cd] '*er*'"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", results);
  predicate = [NSPredicate predicateWithFormat: @"name LIKE[cd] '???er*'"];
  results = [cars filteredArrayUsingPredicate: predicate];
  NSLog (@"%@", results);

以上就是小编给大家分享的iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容,希望大家喜欢。

更多精彩内容其他人还在看

正则表达式详细介绍(上)

这篇文章主要介绍了正则表达式,正则表达式是由英文词语regular expression翻译过来的,就是符合某种规则的表达式。本文将会详细的介绍正则表达式,需要的朋友可以参考下
收藏 0 赞 0 分享

正则表达式详细介绍(下)

这篇文章继续介绍了更多关于正则表达式知识点,帮助大家更好的认识正则表达式,从而更好的掌握它,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

比较常用证件正则表达式验证大全

最近做项目,有项目需求需要对各种常用的证件进行验证。而港澳通行证,台湾通行证,护照这些证件,在网上没有搜到正则验证的方法,后来经过一番折腾,结合validator这个验证插件写了一些代码,在此分享给大家,需要的朋友可以参考下
收藏 0 赞 0 分享

正则表达式实现将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式

这篇文章主要介绍了正则表达式实现将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式的方法,是一个比较简单实用的正则替换应用,对于怎能则表达式的学习具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

js使用正则子表达式匹配首字母与尾字母相同单词的方法

这篇文章主要介绍了js使用正则子表达式匹配首字母与尾字母相同单词的方法,可实现将多行文本框中首位字母相同的单词进行匹配的功能,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

正则表达式中的正向预查和负向预查实例分析

这篇文章主要介绍了正则表达式中的正向预查和负向预查,实例分析了正向预查和负向预查的概念与具体用法,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

js正则表达式中的单行模式与多行模式实例分析

这篇文章主要介绍了js正则表达式中的单行模式与多行模式,实例分析了js正则表达式中实现单行模式与多行模式的技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

js正则查找match()与替换replace()用法实例

这篇文章主要介绍了js正则查找match()与替换replace()用法,实例分析了js中正则的查找match()与替换replace()的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

js正则表达式test()和exec()用法实例

这篇文章主要介绍了js正则表达式test()和exec()用法,实例分析了test()函数和exec()函数在进行正则匹配时的使用技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

php正则替换变量指定字符的方法

这篇文章主要介绍了php正则替换变量指定字符的方法,涉及php使用正则表达式进行字符串替换的技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多