2015-03-07 9 views
13

Ich bin vertraut mit pcre regexes, aber sie scheinen nicht in Swift arbeiten.Schnelles reguläres Ausdruckformat?

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

Zahlen zur Validierung wie 1.000.000,00

Dies ist jedoch in meiner schnellen Funktion setzen, einen Fehler verursacht.

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

"Ungültige Escape-Sequenz in Litteral"

Dies ist natürlich, weil pcre das Zeichen "\" verwendet, die ein schnelles interpretiert als eine Flucht (ich glaube?)

da ich so kann nicht nur die Regexes verwenden, die ich gewohnt bin. Wie übersetze ich sie, um mit Swift-Code kompatibel zu sein?

+1

entkommen Sie einfach den Backslash noch einmal. –

Antwort

28

In doppelten Anführungszeichen würde ein einzelner umgekehrter Schrägstrich als Escape-Sequenz gelesen werden. Sie müssen alle umgekehrten Schrägstriche noch einmal entfernen, um sie als Regex-Backslash-Zeichen zu betrachten.

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

Vielen Dank! – MLyck