Как проверить, содержит ли текст только цифры?

Я перепробовал много дел, но ни один из них не работает для меня. Я старался:

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

также пытался

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

Итак, как я могу проверить, что мой текст содержит только цифры?

Ответ 1

Я считаю это решение в Swift 3 более чистым

import Foundation

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

Ответ 2

Вам просто нужно проверить, является ли Set символов вашего String подмножеством Set, содержащим символы от 0 до 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

Ответ 3

Попробуйте с этим

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

Ответ 4

В продолжение фантастической работы Луки, приведенной выше, приведен ответ, написанный в Swift 5.

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

Ответ 5

Ваши первые варианты работают для меня на детской площадке. Проверьте его снова. Предполагая str = resultTitles[indexPath.row]

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

// Now let 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"
}

Ответ 6

Это может вам помочь.

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

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

Ответ 7

Попробуйте следующее:

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

Ответ 8

Самый чистый способ Swift, на мой взгляд, заключается в следующем:

extension String {
  var isDigits: Bool {
    guard !self.isEmpty else { return false }
    return !self.contains { Int(String($0)) == nil }
  }
}

"123".isDigits // returns true
"12d".isDigits // returns false