2016-01-04 3 views
8

Я пробовал много случаев, но никто не работает для меня. Я пробовал:Как проверить, содержит ли текст только цифры?

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

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

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

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

+0

При преобразовании в int (вариант 2) какой ответ вы получаете? Вы пробовали это: https://github.com/jpotts18/SwiftValidator –

+0

Может ли ваш текст содержать несколько номеров или только один? – Cristik

+0

Возможный дубликат [Почему мой код не может найти цифры в моей строке?] (Http://stackoverflow.com/questions/34586045/why-my-code-cannot-find-digits-in-my-string) – nobism

ответ

0

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

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

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

в обоих я получаю «Valid Integer». Когда я набираю «123» или «Swift» –

+0

, я также пытался и получить правильный результат для «123», возвращает «Valid Integer» и «Swift» возвращает «Not Valid Integer». – technerd

-1

Попробуйте это:

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

Вопрос помечен как «swift», а не «object-c». – Moritz

1

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

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

Ваших первыми вариантами работа для меня в детской площадке. Проверьте его снова. Предполагая 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

Какой смысл добавлять '.invertedSet' вместо того, чтобы вместо этого возвращать' == '? Это лучше время выполнения или что-то в этом роде? –

+1

Для обработки таких случаев: «123abc». Он содержит алфавит, поэтому он не должен проходить наш чек, но если вы проверите, есть ли у него номера, то он скажет вам, что, да, он имеет номера :) – Ossir

21

Вам просто нужно проверить 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 
+0

хороший. благодаря! –

21

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

CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: yourString)) 
Смежные вопросы