NSDataDetector和NSTextCheckingResult的使用

NSDataDetector是NSRegularExpression的子类,主要用于检测半结构化的数据:日期,地址,电话号码,正则表达式等等。

typedef NS_OPTIONS(uint64_t, NSTextCheckingType) {    // a single type
    NSTextCheckingTypeOrthography           = 1ULL << 0,            // language identification
    NSTextCheckingTypeSpelling              = 1ULL << 1,            // spell checking
    NSTextCheckingTypeGrammar               = 1ULL << 2,            // grammar checking
    NSTextCheckingTypeDate                  = 1ULL << 3,            // date/time detection
    NSTextCheckingTypeAddress               = 1ULL << 4,            // address detection
    NSTextCheckingTypeLink                  = 1ULL << 5,            // link detection
    NSTextCheckingTypeQuote                 = 1ULL << 6,            // smart quotes
    NSTextCheckingTypeDash                  = 1ULL << 7,            // smart dashes
    NSTextCheckingTypeReplacement           = 1ULL << 8,            // fixed replacements, such as copyright symbol for (c)
    NSTextCheckingTypeCorrection            = 1ULL << 9,            // autocorrection
    NSTextCheckingTypeRegularExpression NS_ENUM_AVAILABLE(10_7, 4_0)  = 1ULL << 10,           // regular expression matches
    NSTextCheckingTypePhoneNumber NS_ENUM_AVAILABLE(10_7, 4_0)        = 1ULL << 11,           // phone number detection
    NSTextCheckingTypeTransitInformation NS_ENUM_AVAILABLE(10_7, 4_0) = 1ULL << 12            // transit (e.g. flight) info detection
};

使用方法

    NSError *error = nil;
    //根据检测的类型初始化NSDataDetector
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber | NSTextCheckingTypeLink
                                                               error:&error];
    //需要检测的字符串
    NSString *testStr = @"有一个网址:wwww.JohnnyLiu.com有一个电话:15310547654 还有一个地址:大屯路";
    //可以有多种方法检测匹配的数据
    //1.检测然后对每个检测到的数据进行操作
    //- (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (^)(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop))block;
    //2.检测获得检测得到的数组
    //- (NSArray *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;
    //3.获得检测得到的总数
    //- (NSUInteger)numberOfMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;
    //4.第一个检测到的数据
    //- (NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;
    //5.第一检测到的数据的Range
    //- (NSRange)rangeOfFirstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

    [detector enumerateMatchesInString:testStr
                               options:kNilOptions
                                 range:NSMakeRange(0, testStr.length)
                            usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                                //NSTextCheckingResult有很多属性,和检测的类型相匹配,如URL,phoneNumber,date,addressComponents等等
                                //NSTextCheckingResult还有Range 和 NSTextCheckingType两个属性,方便进行操作
                                NSLog(@"result.range = %@",NSStringFromRange(result.range));
                                if (result.URL) {
                                    NSLog(@"url = %@",result.URL);
                                }
                                if (result.phoneNumber) {
                                    NSLog(@"phone = %@",result.phoneNumber);
                                }
    }];
    //结果-------------------------------------------
    //result.range = {6, 18}
    //url = http://wwww.JohnnyLiu.com
    //result.range = {27, 14}
    //phone = 电话:15310547654
时间: 2024-08-30 08:06:33

NSDataDetector和NSTextCheckingResult的使用的相关文章

NSDataDetector数据检测器,检测是否是链接

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error];//创建检测器,检测类型是linke(可改成检测别的) NSArray *matches = [detector matchesInString:textString options:0 range:NSMakeRange(0, textString.length)];//检测字符串 for (

NSTextCheckingResult类 ios自带识别电话号码,网址等

NSDataDetector是NSRegularExpression的子类,主要用于检测半结构化的数据:日期,地址,电话号码,正则表达式等等.//首先有一段字符串NSString *str = @"www.baidu.comdhfjdfj17701031767";//根据检测的类型初始化 这里是检测电话号码和网址NSDataDetector NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCh

iOS Foundation 框架 224 篇相关文档分类整理

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 截至 2014-05-02 ,苹果官网 Foundation 框架相关文档共计 224 篇,分类如下: Foundation 框架概述文档:常量.

iOS 7系列译文:认识 TextKit

OS 7:终于来了,TextKit.   功能 所以咱们到了.iOS7 带着 TextKit 登陆了.咱们看看它可以做什么!深入之前,我还想提一下,严格来说,这些事情中的大部分以前都可以做.如果你有大量的资源和时间来用CoreText构建一个文本引擎,这些都是可以做的.但是如果以前你想构建一个完善的富文本编辑器,你得花费几个月的时间.现在就非常简单,你只需要到在Xcode里打开一个界面文件,然后将UITextView拖到你的试图控制器,就可以获得所有的功能: 字距调整(Kerning):所有的字

Foundation Classes

Classes Class Abstract NSObject NSObject is the root class of most Objective-C class hierarchies. 在Objective-C的类层次结构树中,NSObject是大多数类的根类. NSArray NSArray and its subclass NSMutableArray manage ordered collections of objects called arrays. NSArray和其子类N

初识 TextKit

iOS 7 的发布给开发者的案头带来了很多新工具.其中一个就是 TextKit.TextKit 由许多新的 UIKit 类组成,顾名思义,这些类就是用来处理文本的.在这里,我们将介绍 TextKit 的来由.它的组成,以及通过几个例子解释开发者怎样将它派上大用场. 但是首先我们得先阐明一个观点:TextKit 可能是近期对 UIKit 最重要的补充了.iOS 7 的新界面用纯文本按钮替换了大量的图标和边框.总的来说,文本和文本布局在新 OS 系统的视觉效果中所占有的重要性大大提高了.iOS7 的

读书笔记--关于Cocoa框架中的类

Chapter 10 Cocoa Classes iOS编程时, 实际是进行Cocoa编程. 所以必须熟悉Cocoa, 必须知道Cocoa是什么, 它能够做什么, 你和Cocoa如何进行"交流". Cocoa是一个庞大的Framework, 被分割成若干较小的Framework. 任何iOS编程人员都需要花费一定时间来熟练Cocoa. Cocoa中含有一些主要的规则和组件, 最好是以它们为主线来学习Cocoa. Cocoa大部分类都是OC写的, 虽然OC类和Swift类能相互转换.但S

iOS 中的正则匹配(工具类)

正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对字符串的一种过滤逻辑, 正则表达式就是用于描述这些规则的工具, 或者说, 正则表达式就是记录文本规则的代码. 在开发中, 我们经常会有查找符合某些复杂规则的字符串的需要, 比如数据校验: 判断用户的输入是否合法(如:用户注册的时候,QQ号码,电话号码,邮箱是否符合要求) 下面让我们先来看看正则匹配常用的一些字

[iOS]利用系统NSRegularExpression使用正则表达式

// Created by 李东旭 on 16/1/22. // Copyright © 2016年 李东旭. All rights reserved. // #import <UIKit/UIKit.h> #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad];