A specialized regular expression object that matches natural language text for predefined data patterns.


class NSDataDetector : NSRegularExpression


Currently the NSDataDetector class can match dates, addresses, links, phone numbers and transit information.

The results of matching content is returned as NSTextCheckingResult objects. However, the NSTextCheckingResult objects returned by NSDataDetector are different from those returned by the base class NSRegularExpression. Results returned by NSDataDetector will be of one of the data detectors types, depending on the type of result being returned, and they will have corresponding properties. For example, results of type date have a date, timeZone, and duration; results of type link have a url, and so forth.


The following shows several graduated examples of using the NSDataDetector class.

This code fragment creates a data detector that will find URL links and phone numbers. If an error was encountered it is returned in error.

   NSError *error = nil;
   NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink|NSTextCheckingTypePhoneNumber

Once the data detector instance is created you can determine the number of matches within a range of a string using the NSRegularExpression method numberOfMatches(in:options:range:).

   NSUInteger numberOfMatches = [detector numberOfMatchesInString:string
                                                            range:NSMakeRange(0, [string length])];

If you are interested only in the overall range of the first match, the numberOfMatches(in:options:range:) method provides it. However, with data detectors, this is less likely than with regular expressions, because clients usually will be interested in additional information as well.

The additional information available depends on the type of the result. For results of type link, it is the URL property that is significant. For results of type NSTextCheckingTypePhoneNumber , it is the phoneNumber property instead.

The matches(in:options:range:) method is similar to the firstMatch(in:options:range:), except that it returns all matches rather than only the first. The following code fragment finds all the matches for links and phone numbers in a string.

   NSArray *matches = [detector matchesInString:string
                                          range:NSMakeRange(0, [string length])];
   for (NSTextCheckingResult *match in matches) {
        NSRange matchRange = [match range];
        if ([match resultType] == NSTextCheckingTypeLink) {
            NSURL *url = [match URL];
        } else if ([match resultType] == NSTextCheckingTypePhoneNumber) {
            NSString *phoneNumber = [match phoneNumber];

The NSRegularExpression block object enumerator is the most general and flexible of the matching methods. It allows you to iterate through matches in a string, performing arbitrary actions on each as specified by the code in the block, and to stop partway through if desired. In the following code fragment, the iteration is stopped after a certain number of matches have been found.

   __block NSUInteger count = 0;
   [detector enumerateMatchesInString:string
                                range:NSMakeRange(0, [string length])
                           usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
        NSRange matchRange = [match range];
        if ([match resultType] == NSTextCheckingTypeLink) {
            NSURL *url = [match URL];
        } else if ([match resultType] == NSTextCheckingTypePhoneNumber) {
            NSString *phoneNumber = [match phoneNumber];
        if (++count >= 100) *stop = YES;


Creating Data Detector Instances

init(types: NSTextCheckingTypes)

Initializes and returns a data detector instance.

Getting the Checking Types

var checkingTypes: NSTextCheckingTypes

Returns the checking types for this data detector.


Inherits From

Conforms To

See Also

Pattern Matching

class Scanner

A string parser that scans for substrings or characters in a character set, and for numeric values from decimal, hexadecimal, and floating-point representations.

class NSRegularExpression

An immutable representation of a compiled regular expression that you apply to Unicode strings.

class NSTextCheckingResult

An occurrence of textual content found during the analysis of a block of text, such as when matching a regular expression.

let NSNotFound: Int

A value indicating that a requested item couldn’t be found or doesn’t exist.