2015-03-07 4 views
13

Ho familiarità con le regex del pcre, tuttavia non sembrano funzionare in modo rapido.Formato di espressione regolare Swift?

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

per convalidare i numeri come 1.000.000,00

Tuttavia, mettere questo nella mia funzione rapida, causa un errore.

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

"sequenza di escape non valido nel letterale"

Questo è, naturalmente, perché PCRE utilizza il carattere "\", che interpreta veloci come una via di fuga (credo?)

Quindi, dal momento che non posso semplicemente usare le regex a cui sono abituato. Come posso tradurli per essere compatibili con il codice Swift?

+1

basta scappare un'altra volta. –

risposta

28

All'interno di virgolette doppie, un singolo backslash viene letto come una sequenza di escape. È necessario sfuggire ancora una volta tutte le barre inverse per considerarlo come un carattere backslash regex.

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

Grazie mille! – MLyck