Подтвердить что ты не робот

Быстрый формат регулярных выражений?

Мне знакомы с регулярными выражениями pcre, однако они не работают быстро.

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

для проверки чисел, таких как 1,000,000.00

Однако, поместив это в мою быструю функцию, вы получите сообщение об ошибке.

    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
    }
}

"Неверная escape-последовательность в litteral"

Это, конечно, потому что pcre использует символ "\", который swift интерпретирует как побег (я верю?)

Так как я не могу просто использовать регулярные выражения, к которым я привык. Как перевести их для совместимости с кодом Swift?

4b9b3361

Ответ 1

В двойных кавычках одиночная обратная косая черта будет считываться как escape-последовательность. Вам нужно избежать всех обратных косых черт еще раз, чтобы считать его символом обратной косой черты regex.

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