Search code examples
iosregexswiftpcre

Swift regular expression format?


I'm familiar with doing pcre regexes, however they don't seem to work in swift.

^([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$

to validate numbers like 1,000,000.00

However, putting this in my swift function, causes an error.

    extension String {
    func isValidNumber() -> Bool {
        let regex = NSRegularExpression(pattern: "^([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$", options: .CaseInsensitive, error: nil)
        return regex?.firstMatchInString(self, options: nil, range: NSMakeRange(0, countElements(self))) != nil
    }
}

"Invalid escape sequence in litteral"

This is of course, because pcre uses the "\" character, which swift interprets as an escape (I believe?)

So since I can't just use the regexes I'm used to. How do I translate them to be compatible with Swift code?


Solution

  • Within double quotes, a single backslash would be readed as an escape sequence. You need to escape all the backslashes one more time in-order to consider it as a regex backslash character.

    "^([1-9]\\d{0,2}(,\\d{3})*|([1-9]\\d*))(\\.\\d{2})?$"