标签: nsdatadetector

是否可以使用NSDataDetector检测NSString中具有空格的链接?

首先,我无法控制我得到的文字.只是想把它放在那里所以你知道我不能改变链接.

我试图在使用NSDataDetector中找到链接的文本包含以下内容:

<h1>My main item</h1>
<img src="http://www.blah.com/My First Image Here.jpg">
<h2>Some extra data</h2>
Run Code Online (Sandbox Code Playgroud)

我正在使用的检测代码是这样,但它找不到这个链接:

NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
NSArray *matches = [linkDetector matchesInString:myHTML options:0 range:NSMakeRange(0, [myHTML length])];

for (NSTextCheckingResult *match in matches) 
{
   if ([match resultType] == NSTextCheckingTypeLink)
   {
      NSURL *url = [match URL];
      // does some stuff
   }
}
Run Code Online (Sandbox Code Playgroud)

这是Apple的链接检测错误,它无法检测带空格的链接,或者我做错了什么?

有没有人有更可靠的方法来检测链接,无论它们是否有空格或特殊字符或其中的任何内容?

regex objective-c ios nsdatadetector

21
推荐指数
1
解决办法
1382
查看次数

NSDataDetector检测"电话号码"文本

我能解释这个问题最简单的方法是使用代码示例及其输出,但实质上发生的NSDataDetector是检测字符串中包含"电话号码"字样的电话号码.

NSError *error = nil;
NSDataDetector *dataDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber
                                                               error:&error];

NSArray *stringsToTest = @[
                           @"testing phone number 0123 4567891",
                           @"testing some other number 0123 4567892",
                           @"phone number 0123 4567893",
                           @"blah blah 0123 4567894",
                           @"testing telephone number 0123 4567895"
                           ];

for (NSString *string in stringsToTest)
{
    [dataDetector enumerateMatchesInString:string
                                   options:0
                                     range:NSMakeRange(0, string.length)
                                usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                                    NSLog(@"%@", result.phoneNumber);
                                }];
}
Run Code Online (Sandbox Code Playgroud)

输出:

2013-11-24 19:04:26.000 PhoneNumberDetector[21874:70b] phone number 0123 4567891
2013-11-24 19:04:26.000 PhoneNumberDetector[21874:70b] 0123 4567892
2013-11-24 19:04:26.000 PhoneNumberDetector[21874:70b] …
Run Code Online (Sandbox Code Playgroud)

objective-c datadetectortypes nsdatadetector

9
推荐指数
1
解决办法
2433
查看次数

使用NSDataDetector进行NSDate检测

我试图从UNKNOWN格式的NSString中获取NSDate ,所以我写了一个类似下面的函数

-(void)dateFromString:(NSString*)string {

    NSError *error = NULL;
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:(NSTextCheckingTypes)NSTextCheckingTypeDate error:&error];

    NSArray *matches = [detector matchesInString:string
                                         options:0
                                           range:NSMakeRange(0, [string length])];

    NSLocale* currentLoc = [NSLocale currentLocale];
    for (NSTextCheckingResult *match in matches) {
        if ([match resultType] == NSTextCheckingTypeDate) {
            NSLog(@"Date : %@", [[match date] descriptionWithLocale:currentLoc]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

除了一个地方外,它运作良好.

如果我调用

[self dateFromString:@"6/12"];
Run Code Online (Sandbox Code Playgroud)

它打印

日期:2014年6月12日,星期四,澳大利亚东部标准时间下午12:00:00

如果我打电话的话

[self dateFromString:@"13/12"];
Run Code Online (Sandbox Code Playgroud)

它打印

日期:2013年12月13日星期五下午12:00:00澳大利亚东部夏令时间

基本上,我希望函数表现一致.由于我住在澳大利亚,它应该在12月6日返回首次执行.第二次通话结果是正确的.

我在这做错了什么?

objective-c nsdate ios nsregularexpression nsdatadetector

9
推荐指数
1
解决办法
2446
查看次数

设置NSDataDetector的上下文日期

假设今天是2014年1月20日.如果我使用NSDataDetector从字符串"明天下午4点"中提取日期,我将得到2014-01-21T16:00.大.

但是,假设我希望NSDataDetector 假装当前日期是2014年1月14日.这样,当我解析"明天下午4点"时,我会得到2014-01-15T16:00.如果我在设备上更改系统时间,我会得到我想要的.但是,有没有办法以编程方式指定它?

谢谢.

objective-c nsdate ios nsdatadetector

8
推荐指数
1
解决办法
701
查看次数

使用NSDataDetector检查电子邮件

我有一个来自服务器的字符串,想检查它是否包含电话号码,邮件地址和电子邮件等表达式.我在电话号码和邮件地址方面取得了成功,但没有收到电子邮件.我是NSDataDetector为了这个目的而使用的.例如

NSString *string = sourceNode.label; //coming from server

//Phone number
NSDataDetector *phoneDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber error:nil]; 
NSArray *phoneMatches = [phoneDetector matchesInString:string options:0 range:NSMakeRange(0, [string length])];

for (NSTextCheckingResult *match in phoneMatches) {

    if ([match resultType] == NSTextCheckingTypePhoneNumber) {
        NSString *matchingStringPhone = [match description];
        NSLog(@"found URL: %@", matchingStringPhone);
    }
}  
Run Code Online (Sandbox Code Playgroud)

但是如何为电子邮件做同样的事情呢?

iphone ios nsdatadetector

7
推荐指数
4
解决办法
6637
查看次数

从NSString解析地址而不使用NSDataDetector

我一直在使用NSDataDetector解析字符串的地址,并且大部分它做得很好.然而,在地址'类似于这个地方它没有检测到它.

6200 North Evan Blvd Suit 487 Highland UT 84043

目前我正在使用此代码:

NSError *error = nil;
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeAddress error:&error];


NSArray *matches = [detector matchesInString:output options:0 range:NSMakeRange(0, [output length])];

for (NSTextCheckingResult *match in matches) {
    if ([match resultType] == NSTextCheckingTypeAddress) {

        _address = [_tesseractData substringWithRange:[match range]];
        NSDictionary *data = [match addressComponents];

        _zip = [data objectForKey:@"ZIP"];
        if (_zip) {
            NSRange zipRange = [_tesseractData rangeOfString:_zip];
            if (zipRange.location != NSNotFound) {
                [_tesseractData deleteCharactersInRange:zipRange];
            }
        }

        _city = [data objectForKey:@"City"];
        if …
Run Code Online (Sandbox Code Playgroud)

objective-c ios nsdatadetector

6
推荐指数
1
解决办法
1009
查看次数

从字符串中提取地址 - 相当于iOS中的NSDataDetector

在iOS中有一个名为的类NSDataDetector,例如,让你传递一个文本,它将检测该文本是否包含邮政地址,日期,链接......

就我而言,我有兴趣为Android找到一个类似的工具,它可以检测文本中的地址.我一直在玩Geocoder,但它只有在你已经知道地址的情况下才有效.否则,它不会达到目的.

我正在寻找的一个例子可能是:

鉴于: This is just a sample text that contains a nice address: 123 W Main St, Imaginary City, IC, 12345 该工具只会返回123 W Main St, Imaginary City, IC, 12345

请记住,地址可能有不同的格式.

提前致谢!

java android street-address google-geocoder nsdatadetector

6
推荐指数
1
解决办法
773
查看次数

使用Swift 3.0中的NSDataDetector从String中提取地址元素

我正在尝试使用NSDataDetector字符串中的地址.我已经看过NSHipster的文章NSDataDetector以及Apple的NSDataDetector文档.我有以下方法,它将从字符串中提取地址:

func getAddress(from dataString: String) -> [String] {
    let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.address.rawValue)
    let matches = detector.matches(in: dataString, options: [], range: NSRange(location: 0, length: dataString.utf16.count))

    var addressArray = [String]()

    // put matches into array of Strings
    for match in matches {
        let address = (dataString as NSString).substring(with: match.range)
        addressArray.append(address)
    }

    return addressArray
}
Run Code Online (Sandbox Code Playgroud)

我想提取地址的元素,而不是整个地址.在NSHipster的NSDataDetector帖子数据检测器的匹配类型中,我看到的地址组件,如NSTextCheckingCityKey,NSTextCheckingStateKeyNSTextCheckingZIPKey.我无法在NSDataDetector初始化中使用这些键.

我在GitHub上挖了一下,看看我是否能找到一个来自crib的例子,但我能找到的唯一东西是主Swift回购中的Objective-C代码或声明性东西.

我99%肯定我可以拿出一个地址的各个组成部分,但我太愚蠢了,无法弄明白.谢谢你的阅读.我欢迎建议.

regex ios nsdatadetector swift swift3

6
推荐指数
1
解决办法
2772
查看次数

如何检测任意字符串中的电子邮件地址

我正在使用以下代码来检测字符串中的电子邮件.除了处理具有纯数字前缀的电子邮件,例如"536264846@gmail.com"之外,它工作正常.是否有可能克服苹果的这个错误?任何帮助将不胜感激!

NSString *string = @"536264846@gmail.com";
NSError *error = NULL;
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error];
NSArray *matches = [detector matchesInString:string
                                     options:0
                                       range:NSMakeRange(0, [string length])];    
for (NSTextCheckingResult *match in matches) {
    if ([match.URL.scheme isEqualToString:@"mailto"]) {
        NSString *email = [match.URL.absoluteString substringFromIndex:match.URL.scheme.length + 1];
        NSLog(@"email :%@",email);

    }else{
        NSLog(@"[match URL] :%@",[match URL]);
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑:日志结果为:[匹配网址]:http://gmail.com

email ios nsdatadetector

1
推荐指数
1
解决办法
1412
查看次数