title: URL String validation in iOS using NSRegularExpression
body: <p>I would like to validate whether an NSString can be converted to a valid NSURL. I know that using URLWithString will make a URL, but it is not always valid. Additionally, I don't want to make a web call every time my user enters a string to verify the URL as that is not battery/data efficient, and it relies on having an active web connection which is not always the case. I came across <a href="https://mathiasbynens.be/demo/url-regex" rel="nofollow">this</a> site various URLs, and I am now attempting to copy the regex they used and convert it to NSRegular Expression. I've been using this helpful <a href="http://www.raywenderlich.com/downloads/RW-NSRegularExpression-Cheatsheet.pdf" rel="nofollow">cheatsheet</a> to try and convert it, but to no avail. I stored the regex as a const like so:</p>
  
  <pre><code>static NSString * const urlPattern = @"_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS";
  </code></pre>
  
  <p>I have been attempting to convert this by adding escape characters in front of all special characters listed in the cheatsheet, but it doesn't seem to be working properly. Has anyone here has any luck getting @diegoperini's URL regex to work in Objective-C or Swift using NSRegularExpressions?</p>