Wie können wir überprüfen, ob eine Zeichenfolge nur aus Zahlen besteht? Ich nehme einen Teilstring aus einem String heraus und möchte überprüfen, ob es sich um einen numerischen Teilstring handelt oder nicht.
NSString *newString = [myString substringWithRange:NSMakeRange(2,3)];
iphone
objective-c
cocoa-touch
ios
nsstring
Abhinav
quelle
quelle
.
Zeichen[[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet]]
invertedSet
, dass eine Klasse zurückgegeben wird, die den Satz umschließt, von dem sie erstellt wurde, und den entgegengesetzten Wert für alle Abfragen zurückgibt. Aber ich weiß es nicht genau.Ich würde vorschlagen, die
numberFromString:
Methode aus der NSNumberFormatter- Klasse zu verwenden. Wenn die Zahl nicht gültig ist, wird nil zurückgegeben. Andernfalls erhalten Sie eine NS-Nummer.quelle
NO
für Ihre Zeichenfolge zurückkehren. Ebenfalls wissenswert: Sie kehren auchYES
für mit Leerzeichen aufgefüllte Zahlen zurück. Übrigens habe ich Ihrer Antwort gerade ein aktuelles Code-Snippet hinzugefügt, hoffe, es macht Ihnen nichts aus.Validieren Sie durch regulären Ausdruck, nach Muster
"^[0-9]+$"
mit der folgenden Methode-validateString:withPattern:
."^[0-9]+(.{1}[0-9]+)?$"
"."
."^[0-9]{4}$"
."."
und die Länge zwischen 2 ~ 5 liegt."^[0-9]{2,5}$"
."^-?\d+$"
Der reguläre Ausdruck kann auf der Online-Website überprüft werden .
Die Hilfsfunktion ist wie folgt.
Swift 3 Version:
Test auf dem Spielplatz.
quelle
func numberOnly(string: String) -> Int { let expression = "" let regex = NSRegularExpression.init(pattern: expression, options: .caseInsensitive) let numberOfMatches = regex.numberOfMatches(in: string, options: .reportProgress, range: NSRange.init(location: 0, length: string.characters.count)) if numberOfMatches == 0 { return Int(string)! } return 0 }
Und ich habe einen Fehler bekommenPlayground execution aborted: error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
return matchRange.location != NSNotFound;
^-?\d+$
, ich habe es auf der Website überprüft: regex101.comSie können einen NSScanner erstellen und einfach die Zeichenfolge scannen:
Schauen Sie sich NSScanner Dokumentation für weitere Methoden zur Auswahl.
quelle
isAtEnd
.Ich denke, der einfachste Weg, um zu überprüfen, ob jedes Zeichen in einer bestimmten Zeichenfolge numerisch ist, ist wahrscheinlich:
Verwenden Sie eine der anderen NSCharacterSet-Factory-Methoden, wenn Sie die vollständige Kontrolle über akzeptable Zeichen wünschen.
quelle
Diese ursprüngliche Frage betraf Objective-C, wurde aber auch Jahre vor der Ankündigung von Swift veröffentlicht. Wenn Sie also von Google hierher kommen und nach einer Lösung suchen, die Swift verwendet, können Sie Folgendes tun:
quelle
Swift 3-Lösung, wenn überprüft werden muss, ob die Zeichenfolge nur Ziffern enthält:
quelle
.inverted
und anderen Aktionen macht.Dies funktioniert für Ganzzahlen in Zeichenfolgen.
Hier ist eine kleine Hilfskategorie basierend auf Johns Antwort oben:
in der .h-Datei
in .m Datei
Verwendung:
quelle
Die Swift 3-Lösung könnte wie folgt aussehen:
quelle
Die Antwort von John Calsbeek ist fast richtig, lässt jedoch einige Unicode- Randfälle aus .
Gemäß der Dokumentation für enthält
decimalDigitCharacterSet
dieser Satz alle Zeichen, die von Unicode als kategorisiert wurdenNd
. So wird ihre Antwort unter anderem akzeptieren:१
(U + 0967 DEVANAGARI DIGIT ONE)᠑
(U + 1811 MONGOLIAN DIGIT ONE)𝟙
(U + 1D7D9 MATHEMATICAL DOUBLE-STRUCK DIGIT ONE)Während dies in gewissem Sinne richtig ist - jedes Zeichen in
Nd
wird einer Dezimalstelle zugeordnet -, ist es mit ziemlicher Sicherheit nicht das, was der Fragesteller erwartet hat. Zum jetzigen Zeitpunkt gibt es 610 Codepunkte, die als kategorisiert sindNd
, von denen nur zehn die erwarteten Zeichen0
(U + 0030) bis9
(U + 0039) sind.Um das Problem zu beheben, geben Sie einfach genau die Zeichen an, die akzeptabel sind:
quelle
Noch eine Option:
Anwendungsbeispiel:
quelle
Eine Erweiterung der Antwort von @John Calsbeek und eine Klarstellung der Kommentare von @Jeff und @gyratory circus .
Folgendes kann als Kategoriemethode für hinzugefügt werden
NSString
quelle
Testen Sie, ob eine Zeichenfolge eine Zahl ist
quelle
Schnelle Erweiterung:
quelle
Für Swift 3
quelle
Wenn Sie Ziffern aus gemischten Sprachen haben , die die 0-9-Ziffernformate verwenden (oder nicht), müssen Sie einen regulären Ausdruck ausführen, der nach einer beliebigen Zahl sucht. Als Nächstes müssen Sie alle Ziffern in 0- konvertieren. 9-Format (wenn Sie den tatsächlichen Wert benötigen):
quelle
Der einfachste und zuverlässigste Weg ist der Versuch, so zu wirken, als
Double
ob das Ergebnisnil
- es kann nicht zu einer legitimen Zahl geformt werden.Weitere Informationen finden Sie in der Dokumentation: https://developer.apple.com/documentation/swift/double/2926277-init
quelle
Simple hat die String-Erweiterung geschrieben:
quelle