3

My app receives numerous text strings which may or may not contain a URL anywhere within the string. What would be the best method to extract a URL from within a string? Thank you.

2 Answers 2

8

If you are working on a Mac application, Mac OS X 10.6 offers a new API to let you detect URLs with the spell checker. You may do it this way.

NSString *s = @"http://example.com"
NSInteger wordCount = 0;
NSOrthography *orthography = nil;
NSArray *checkResults = [[NSSpellChecker sharedSpellChecker] checkString:s range:NSMakeRange(0, [s length]) types:NSTextCheckingTypeLink options:nil inSpellDocumentWithTag:0 orthography:&orthography wordCount:&wordCount];
for (NSTextCheckingResult *result in checkResults) {
    NSRange range = result.range;
    NSURL *URL = result.URL;
}
Sign up to request clarification or add additional context in comments.

2 Comments

This is definitely preferable to bringing in a dedicated framework if you can. Note that you don't actually care about word count of orthography usually when searching for links, so just pass in a NULL pointer for efficiency.
I've also implemented this in our open source KSFileUtilities code: github.com/karelia/KSFileUtilities/commit/…
3

The BSD-licensed AutoHyperlinks framework provides classes to scan text for URLs and either return them to you or mark them up as links in an attributed string.

I don't think it builds out of the box for the iPhone, but you could always add preprocessor directives to cut out any AppKit-dependent code. The scan-and-return interface should just work, once you get it to build. (Make sure to run the tests.)

Mike Abdullah wrote a patch for iPhone support. You might try that.

3 Comments

Thanks, I tried this but judging by the number of errors and warnings generated, it will require a significant amount work to get this working on the iPhone -
JK: That can be misleading. A single line of code can produce a lot of errors if it's sufficiently uncompilable, but it's still only one line of code. I think the AppKit-dependent parts of AutoHyperlinks are isolated enough that you could conditionalize them out fairly easily.
Thanks Peter. I'll give the patch a try tomorrow.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.