import Foundation
let pattern = ##"""
\b
\+?1?
(?<separator>\s|-|\.)?
(?: # area code with optional parentheses
(?<area_code>[2-9][0-8]\d)
|\((?&area_code)\)
)
(?&separator)?
(?: # exchange
(?!555)
[2-9]
(?!11)\d\d
)
(?&separator)?
\d{4} # line
\b
"""##
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .allowCommentsAndWhitespace])
let testString = ##"""
212 718-1234
(212)718-1234
(212) 718-1234
1(212)718-1234
1-212-718-1234
1.212.718.1234
+1-212-718-1234
+1.212.718.1234
1-212-718-1234
+1 (212) 718-1234
# 1-VALID 2-VALID 4-VALID
231 212 1234
234-235-5678 is a valid telephone number with area code 234, central office prefix (exchange) 235, and line number 5678.
12127181234
(212)7181234
# 1-INVALID 2-INVALID 4-INVALID
091 012 1234
# 1-INVALID 2-VALID 4-INVALID
081 012 1234
171 012 1234
# 1-VALID 2-VALID 4-INVALID
231 012 1234
# 1-INVALID 2-INVALID 4-VALID
091 212 1234
# 1-INVALID 2-VALID 4-VALID
081 212 1234
171 212 1234
231 555 1234
867-5309 missing area code
The number 234-911-5678 is invalid, because the central office code must not be in the form N11. 314-159-2653 is invalid, because the office code must not begin with 1. 123-234-5678 is invalid, because the NPA must not begin with 0 or 1.
1 212) 718 1234
121271812341212718123412127181234
"""##
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let matches = regex.matches(in: testString, range: stringRange)
var result: [[String]] = []
for match in matches {
var groups: [String] = []
for rangeIndex in 1 ..< match.numberOfRanges {
let nsRange = match.range(at: rangeIndex)
guard !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) else { continue }
let string = (testString as NSString).substring(with: nsRange)
groups.append(string)
}
if !groups.isEmpty {
result.append(groups)
}
}
print(result)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression