Objective-C中利用正则去除非数字字母汉字方法实例

 更新时间:2018年06月26日 10:58:36   作者:東引甌越  
正则表达式对我们日常开发来说是必不可少的,下面这篇文章主要给大家介绍了关于Objective-C中如何利用正则去除非数字字母汉字的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

前言

今天碰到个需求,PM要求输入框中取出非字母数字汉字的输入.

带着这个疑问开始今天的文章

准备工作

创建个demo 代码如下

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *input;
@property (weak, nonatomic) IBOutlet UILabel *label;
@end
@implementation ViewController
- (void)viewDidLoad {
 [super viewDidLoad];
 self.input.delegate = self;
 [self.input addTarget:self action:@selector(textChange:) forControlEvents:UIControlEventEditingChanged];
}
//当文本内容改变时调用
- (void)textChange:(UITextField *)textField
{
 //这里调用相关方法过滤字符串显示出来
 self.label.text = //...;
}

在网上找了一圈大多都是使用谓词去判断时候包含,没有几个给出相应的处理字符串.

我找到了3种 处理字符串的方式

  • 方案1 使用谓词过滤
  • 方案2 使用正则过滤增加寻找的字符串长度
  • 方案3 使用正则精简过滤字符串

方案1

- (NSString *)filterString1:(NSString *)str {
 NSString *regex = @"^[a-zA-Z0-9\u4e00-\u9fa5]+";
 NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
 NSMutableString * retStr = [NSMutableString string];
 for(NSInteger i=0; i< [str length];i++){
  NSRange range = NSMakeRange(i, 1);
  NSString *character = [str substringWithRange:range];
  if([pred evaluateWithObject:character])
  {
   [retStr appendString:character];
  }
 }
 return retStr;
}

这种方式虽然能实现 但是代码略显冗长,不过能就解决问题

//方案2
- (NSString *)filterString2:(NSString *)str {
 NSString *regex = @"[^a-zA-Z0-9\u4e00-\u9fa5]";
 NSMutableString *mstr = [NSMutableString stringWithFormat:@"%@", str];
 NSUInteger i = [mstr replaceOccurrencesOfString:regex withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, mstr.length)];
 return [NSString stringWithFormat:@"%@-长度:%zd",mstr,i];
}

同样的方法使用正则replaceOccurrencesOfString:withString:options:range:方法替换字符串

下面我们精简到2行代码

//方案3
- (NSString *)filterString3:(NSString *)str {
 NSString *regex = @"[^a-zA-Z0-9\u4e00-\u9fa5]";
 return [str stringByReplacingOccurrencesOfString:regex withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, str.length)];
}

最终方案3 得到的预期结果还是不错,推荐使用

总结

有些问题都是在工作中遇到,希望记录下来一起分享和学习.

源码下载:

Demo在这里 (本地下载

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • iOS应用设计模式开发中对简单工厂和工厂方法模式的运用

    iOS应用设计模式开发中对简单工厂和工厂方法模式的运用

    这篇文章主要介绍了iOS应用设计模式开发中对简单工厂和工厂方法模式的运用,示例代码为传统的Objective-C,需要的朋友可以参考下
    2016-03-03
  • iOS中大尺寸图片的旋转与缩放实例详解

    iOS中大尺寸图片的旋转与缩放实例详解

    图片缩小旋转是我们在开发中经常会遇到的一个功能,下面这篇文章主要给大家介绍了关于iOS中大尺寸图片的旋转与缩放的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-09-09
  • 如何在iOS中高效的加载图片详解

    如何在iOS中高效的加载图片详解

    这篇文章主要给大家介绍了关于如何在iOS中高效的加载图片的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用iOS具有一定的参考学习价值,需要的朋友可以参考下
    2021-10-10
  • ios开发中的容错处理示例详解

    ios开发中的容错处理示例详解

    最近发现还是有很多朋友在问类似解析时容错问题怎么解决,所以下面这篇文章主要给大家介绍了关于ios开发中的容错处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们一起来看看吧
    2018-05-05
  • iOS小数取整的方法(ceil floor round)示例

    iOS小数取整的方法(ceil floor round)示例

    这篇文章主要为大家介绍了iOS小数取整的方法(ceil floor round)示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 实例分析IOS实现自动打包

    实例分析IOS实现自动打包

    本篇文章给大家分享了IOS实现自动打包的相关知识点,以及需要的操作内容做了分享,有需要的朋友可以学习下。
    2018-05-05
  • iOS实现的多条折线图封装实例

    iOS实现的多条折线图封装实例

    这篇文章主要跟大家分享了关于利用iOS实现多条折线图的封装实例,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • IOS中MMDrawerController第三方抽屉效果的基本使用示例

    IOS中MMDrawerController第三方抽屉效果的基本使用示例

    这篇文章主要介绍了IOS中MMDrawerController第三方抽屉效果的基本使用示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • iOS开发中使app获取本机通讯录的实现代码实例

    iOS开发中使app获取本机通讯录的实现代码实例

    这篇文章主要介绍了iOS开发中使app获取本机通讯录的实现代码实例,主要用到了AddressBook.framework和AddressBookUI.framework,代码基于传统的Objective-C,需要的朋友可以参考下
    2016-01-01
  • iOS界面跳转时导航栏和tabBar的隐藏与显示功能

    iOS界面跳转时导航栏和tabBar的隐藏与显示功能

    这篇文章主要介绍了iOS界面跳转时导航栏和tabBar的隐藏与显示功能,需要的朋友可以参考下
    2017-02-02

最新评论