2016-01-04 10 views
8

Ich habe viele Fälle ausprobiert, aber keiner arbeitet für mich. Ich habe versucht:Wie überprüft man, ob Text nur Zahlen enthält?

if resultTitles[indexPath.row].rangeOfCharacterFromSet(badCharacters) == nil { 
    let badCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet 
    print("Index: \(indexPath.row)") 
} 

auch versucht zu

if ((resultTitles[0].toInt()) != nil) { 
    print("ERROR") 
} 

Also, wie kann ich überprüfen, dass mein Text nur Zahlen enthält?

+0

Während der Konvertierung zu int (Option 2), welche Antwort Bekommst du? Haben Sie Folgendes versucht: https://github.com/jpotts18/SwiftValidator –

+0

Kann Ihr Text mehrere Zahlen oder nur eine enthalten? – Cristik

+0

Mögliches Duplikat von [Warum kann mein Code in meinem String keine Ziffern finden?] (Http://stackoverflow.com/questions/34586045/why-my-code-cannot-find-digits-in-my-string) – nobism

Antwort

0

Dies kann Ihnen helfen.

let string = "536783" 
    let num = Int(string); 

    if num != nil { 
     print("Valid Integer") 
    } 
    else { 
     print("Not Valid Integer") 
    } 
+0

in beiden Fälle bekomme ich "Valid Integer". Wenn ich "123" oder "Swift" eintippe –

+0

habe ich auch versucht und bekommen das richtige Ergebnis für "123" gibt "Valid Integer" zurück und "Swift" gibt "Valid Integer" zurück. – technerd

-1

Try this:

if ([resultTitles[indexPath.row] isMatchedByRegex:@"^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$"]) { 
    //Text is only numeric 
} 
else 
{ 
    //Text is not only numeric 
} 
+0

Die Frage ist markiert mit "swift", nicht "objective-c". – Moritz

1

Versuchen mit diesen

let numbersTest = resultTitles[indexPath.row] 
     if let number = Int(numbersTest){ 
      print(number)//contains onlyy number 
     }else{ 
      print("notnumber")//Not number 
     } 
1

Ihren ersten Optionen funktioniert für mich auf dem Spielplatz. Überprüfen Sie es erneut. Unter der Annahme, str = resultTitles[indexPath.row]

func isStringContainsOnlyNumbers(string: String) -> Bool { 
    return string.rangeOfCharacterFromSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet) != nil 
} 

// Now let's try to use it 

let str = "Hello, playground" 

if (isStringContainsOnlyNumbers(str)) { 
    print("\(str) has illegal characters") // "Hello, playground has illegal characters" 
} 
else { 
    print("\(str) has only number") 
} 

let numStr = "332432" 

if (isStringContainsOnlyNumbers(numStr)) { 
    print("\(numStr) has illegal characters") 
} 
else { 
    print("\(numStr) has only number") // "332432 has only number\n" 
} 
+0

Was ist der Sinn des Hinzufügens von '.invertedSet' anstelle der Rückkehr' == '? Ist es besser Laufzeit oder sowas? –

+1

Um solche Fälle zu behandeln: "123abc". Es enthält Alphabet, also sollte es unseren Scheck nicht bestehen, aber wenn Sie überprüfen, ob es Zahlen hat, dann wird es Ihnen sagen, dass es ja Zahlen hat :) – Ossir

21

Sie müssen nur prüfen, ob die Set der Zeichen Ihrer String ist Teilmenge der Set mit den Zeichen von 0 bis 9.

extension String { 
    var isNumeric: Bool { 
     guard self.characters.count > 0 else { return false } 
     let nums: Set<Character> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] 
     return Set(self.characters).isSubset(of: nums) 
    } 
} 

"".isNumeric // false 
"No numbers here".isNumeric // false 
"123".isNumeric // true 
"Hello world 123".isNumeric // false 
+0

gute Eins. Vielen Dank! –

21

ich diese Lösung finden, in Swift 3, sauberer zu sein

CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: yourString)) 
Verwandte Themen