Wie überprüfe ich die Zeichenfolgeneingabe für a UITextField
? Ich möchte überprüfen, ob die Zeichenfolge numerisch ist, einschließlich Dezimalstellen.
objective-c
cocoa-touch
validation
nsstring
uitextfield
g.revolution
quelle
quelle
+ (BOOL) TextIsValidValue:(NSString*)newText:(double)&value:
...(?:|0|[1-9]\\d*)(?:\\.\\d*)
zu sehen, was es bedeutet. Siehe auch Regex WikipediaSie können es in ein paar Zeilen wie folgt tun:
- Dies dient zur Überprüfung der Eingabe nur mit numerischen Zeichen.
NSCharacterSet
Weitere Optionen finden Sie in der Dokumentation . Mit characterSetWithCharactersInString können Sie einen beliebigen Satz gültiger Eingabezeichen angeben.quelle
Es gibt einige Möglichkeiten, wie Sie dies tun können:
nil
nicht.IMO, die Verwendung von so etwas
-[NSString doubleValue]
wäre nicht die beste Option, da beide@"0.0"
und@"abc"
einen doubleValue von 0 haben. Die * value-Methoden geben alle 0 zurück, wenn sie den String nicht richtig konvertieren können, sodass es schwierig wäre, zwischen a zu unterscheiden legitime Zeichenfolge von@"0"
und eine ungültige Zeichenfolge. So etwas wie diestrtol
Funktion von C hätte das gleiche Problem.Ich denke, die Verwendung von NSNumberFormatter wäre die beste Option, da das Gebietsschema berücksichtigt wird (dh die Anzahl
@"1,23"
in Europa im Vergleich@"1.23"
zu den USA).quelle
NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; NSNumber * n = [f numberFromString:@"34jfkjdskj80"]; NSLog(@"N: %@", n);
NSScanner
, wieNSNumberFormatter
, locale berücksichtigt , wenn die Zeichenfolge Parsen, vorausgesetzt , Sie verwendensetLocale:
auf dem Scanner - Objekt (Sie könnten zum Beispiel bieten[NSLocale currentLocale]
).Wenn Sie möchten, dass ein Benutzer nur Zahlen eingeben darf, können Sie Ihren ViewController-Teil von UITextFieldDelegate implementieren lassen und diese Methode definieren:
Es gibt wahrscheinlich effizientere Wege, aber ich finde das ziemlich bequem . Und die Methode sollte leicht an die Validierung von Doppelbildern oder was auch immer anpassbar sein: Verwenden Sie einfach scanDouble: oder ähnliches.
quelle
quelle
Hier sind einige Einzeiler, die die obige Antwort von Peter Lewis ( Überprüfen Sie, ob eine Eingabe in UITextField nur numerisch ist ) mit NSPredicates kombinieren
quelle
Für einen ganzzahligen Test ist es:
quelle
Sie können den doubleValue Ihres Strings wie verwenden
Ich denke, dies wird eine als 0.0 zurückgeben, wenn die Zeichenfolge ungültig ist (es könnte eine Ausnahme auslösen, in diesem Fall können Sie es einfach abfangen, die Dokumente sagen 0.0 tho). Mehr Infos hier
quelle
Hallo, hatte genau das gleiche Problem und ich sehe die Antwort, die ich verwendet habe, nicht. Also hier ist sie.
Ich habe mein Textfeld über IB erstellt und verbunden. Als ich es über Strg + Ziehen mit meinem Code verbunden habe, habe ich Aktion ausgewählt und dann das Ereignis Bearbeiten geändert ausgewählt. Dies löst die Methode bei jeder Zeicheneingabe aus. Sie können ein anderes Ereignis verwenden, um zu passen.
Danach habe ich diesen einfachen Code verwendet, um den Text zu ersetzen. Beachten Sie, dass ich meinen eigenen Zeichensatz erstellt habe, der das Dezimal- / Punktzeichen und die Zahlen enthält. Trennt im Grunde die Zeichenfolge von den ungültigen Zeichen und verbindet sie dann mit einer leeren Zeichenfolge.
Credits: Entfernen Sie alle außer Zahlen aus NSString
quelle
Spät zum Spiel, aber hier eine praktische kleine Kategorie, die Dezimalstellen und das dafür verwendete lokale Symbol berücksichtigt. Link zu seinem Kern hier
quelle
quelle
IMO Der beste Weg, um Ihr Ziel zu erreichen, ist die Anzeige einer numerischen Tastatur anstelle der normalen Tastatur. Dies schränkt ein, welche Schlüssel dem Benutzer zur Verfügung stehen. Dies verringert die Notwendigkeit einer Validierung und verhindert vor allem, dass der Benutzer einen Fehler macht. Der Nummernblock eignet sich auch viel besser zur Eingabe von Nummern, da die Tasten wesentlich größer sind.
Wählen Sie im Interface Builder das UITextField aus, rufen Sie den Attributes Inspector auf und ändern Sie den "Tastaturtyp" in "Decimal Pad".
Dadurch sieht die Tastatur folgendermaßen aus:
Sie müssen nur noch sicherstellen, dass der Benutzer keine zwei Dezimalstellen eingibt. Sie können dies tun, während sie bearbeiten. Fügen Sie Ihrem View Controller den folgenden Code hinzu. Dieser Code entfernt eine zweite Dezimalstelle, sobald er eingegeben wird. Dem Benutzer erscheint es so, als ob die 2. Dezimalstelle überhaupt nicht erschienen wäre.
quelle
quelle
Alter Thread, aber es ist erwähnenswert, dass Apple
NSRegularExpression
in iOS 4.0 eingeführt hat. (Den regulären Ausdruck aus Peters Antwort nehmen)Ich schlage vor, die
NSRegularExpression
Instanz irgendwo zu speichern .quelle
Ich wollte ein Textfeld, das nur ganze Zahlen zulässt. Folgendes habe ich erreicht (unter Verwendung von Informationen von hier und anderswo):
Erstellen Sie einen Ganzzahlformatierer (in UIApplicationDelegate, damit er wiederverwendet werden kann):
Verwenden Sie den Filter in UITextFieldDelegate:
quelle
Nicht so elegant, aber einfach :)
quelle
Akzeptieren Sie Dezimalwerte in Textfeldern mit einem einzelnen (.) Punkt, die mit iPad und iPhone in Swift 3 funktionieren
quelle
Um internationaler zu sein (und nicht nur in den USA ;-)), ersetzen Sie einfach den obigen Code durch
quelle
Diese Antwort verwendet NSFormatter wie zuvor erwähnt. Hör zu:
Ich hoffe es hilft jemandem. =)
quelle
quelle
In Swift 4:
quelle
Dies umfasst: Dezimalteilsteuerung (einschließlich der Anzahl der zulässigen Dezimalstellen), Kopier- / Einfügekontrolle, internationale Trennzeichen.
Schritte:
Stellen Sie sicher, dass Ihr View Controller von UITextFieldDelegate erbt
Klasse MyViewController: UIViewController, UITextFieldDelegate {...
Setzen Sie in viewDidLoad Ihren Steuerelementdelegierten auf self:
überschreiben func viewDidLoad () {super.viewDidLoad (); yourTextField.delegate = self}
Implementieren Sie die folgende Methode und aktualisieren Sie die Konstante "decsAllowed" mit der gewünschten Anzahl von Dezimalstellen oder 0, wenn Sie eine natürliche Zahl wünschen.
Swift 4
Wenn Sie diese Zeichenfolge anschließend sicher in eine Zahl umwandeln müssen, können Sie einfach die Besetzung vom Typ Double (Ihre Zeichenfolge) oder Int (Ihre Zeichenfolge) oder die akademischere Methode verwenden:
quelle