2016-12-04 1 views
0

Ich habe versucht, eine Funktion zu schreiben, die eine gegebene Doppelprüft, ob eine Zahl zwischen 1-100 ist. Und nur ganze Zahlen, so etwas wie 1.5 wäre nicht erlaubt. Erlaubt wäre 1,2,3, ..., 100. Ich verwende den folgenden regulären Ausdruck für das ->überprüfen Sie, ob ein Double-Wert von einem bestimmten Format mit Regex ist

"^([1-9][0-9]?$)|^100$" 

jedoch, auch wenn ich Eingang 100, meine Funktion gibt mir nie wieder wahr. In welcher Weise ist meine Regex falsch?

dies ist der Rest meines Code

func validate(input: Double) -> Bool { 

     let regex = "^([1-9][0-9]?$)|^100$" 

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

die Eingabe ein Doppel sein muss.

+1

Warum verwenden Sie Regex und ein Prädikat dafür? Konvertieren Sie die Zeichenfolge in ein "Double". Wenn das gelingt, dann prüfe den Wert des 'Double'. – rmaddy

+0

BTW - warum 'Double'? Klingt so, als ob du nur ganze Zahlen willst. '3.14' ist ein Doppel zwischen 1 und 100. – rmaddy

+0

Und klären was" Eingabe "ist. – rmaddy

Antwort

0

Sie brauchen nicht einen regulären Ausdruck oder ein Prädikat. Gehen Sie einfach wie folgt vor:

func validate(input: Double) -> Bool { 
    return input >= 1 && input <= 100 && round(input) == input; 
} 
Verwandte Themen