2016-12-05 6 views
2

Ich möchte überprüfen, ob eine bestimmte Double-Eingabe das folgende Format hat: "Die Zahl hat maximal eine Dezimalstelle". So wäre das, was in Ordnung ist, zum BeispielSicherstellen, dass der Eingang Double ein bestimmtes Format hat

100 //this is ok 
100.3 //this is ok 
100.3 //this is ok 
1.333 //this is not ok 
10.333 //this is not ok 

Ich habe versucht, einen regulären Ausdruck verwenden, aber irgendwie funktioniert es nicht. Gibt es eine einfachere Lösung, die ich verwenden könnte?

ich verwendet habe, diesen Code

func validate(input: Double) -> Bool { 
    let regex = "^[1-9]*((\\.|,)[0-9]{1})?$" 

    let inputTest = NSPredicate(format: "SELF MATCHES %@", regex) 
    return inputTest.evaluate(with: String(input)) 
} 
+2

Also, welche regex funktionierte nicht wie erwartet? Wie hast du es benutzt? Bitte zeigen Sie den fehlgeschlagenen Code an. –

+0

hat gerade die Frage bearbeitet! – Misha

+0

Bedeutet das, dass führende Nullen nicht zulässig sind? Versuchen Sie 'let regex =" [1-9] \\ d * (?: [.,] \\ d)? "' –

Antwort

3

Verwenden eines regulären Ausdrucks ist der falsche Ansatz, da es nicht wirklich gut spezifische Probleme mit locale befasst.

Ein besserer Ansatz wäre die Umwandlung der Zeichenfolge in eine Zahl mit NumberFormatter. Dann wandeln Sie die Nummer zurück in eine Zeichenfolge mit einem anderen NumberFormatter Setup mit Ihren spezifischen Anforderungen (z. B. höchstens eine Dezimalziffer). Dann sehen Sie, ob die ursprünglichen und die neu formatierten Zeichenfolgen übereinstimmen oder nicht.

Wenn sie übereinstimmen, hat der Benutzer eine gültige Nummer in der angegebenen Ländereinstellung eingegeben, die den gewünschten Anforderungen entspricht.

2

versuchen, diese Regex:

^\d+([.,](?!\d{3,})\d+)?$

in Englisch: Beginn der Zeichenfolge, durch eine oder mehr Zahlen gefolgt, gegebenenfalls durch eine Dezimalzahl gefolgt und mehr Zahlen, wenn 3 oder mehr Ziffern nicht folgen das Dezimalsystem (die negative Vorschau Teil)

demo

Verwandte Themen