2015-12-18 5 views
10

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

Я нашел это:

if newText.isMatchedByRegex("^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$") { ... } 

но он проверяет, если текст содержит любое число. Как я могу это сделать, если весь текст содержит только числа в Swift?

+0

Попробуйте разборе его в int. Если есть что-то иное, кроме int, оно выдает ошибку. – ShahiM

+0

Как я могу сделать это с коротким пути? @ShahiM –

ответ

31

Вот решение, которое вы можете получить все цифры от String.

Swift 3,0:

let testString = "asdfsdsds12345gdssdsasdf" 

let phone = testString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "") 

print(phone) 
+0

Будет ли этот NSCharacterSet включать арабский тип чисел? Я имею в виду, что пользователю может понадобиться только этот тип чисел (1, 2, 3, 4, ...), но также клавиатура может включать такие числа (123). Как я могу проверить только (1, 2, 3)? –

+1

@ СергейОлейнич, если вы хотите быть уверенным, что в ваш набор включены только определенные символы, вы можете определить набор символов методом '+ characterSetWithCharactersInString:'. ([источник] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/#//apple_ref/occ/clm/NSCharacterSet/characterSetWithCharactersInString :)) – holex

+0

@holex Спасибо вы) –

-3

Это должно работать:

func isNumeric(string: String) -> Bool 
{ 
    let number = Int(string) 
    return number != nil 
} 
+4

Это не работает, если строка слишком длинная, и результат не помещается в 'Int'. В этом случае он возвращает 'nil'. Попробуйте строку с цифрами '20'. – vacawama

2

вы можете использовать "^[0-9]+$" instade "^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$"

Это будет принимать один или более цифр, если вы хотите принять только одну цифру, то удалить +

+0

как насчет плавающих чисел? или негативы? это те, которые больше не являются цифрами? – holex

+0

"^ [0-9] + (\. [0-9] +)? $" Это будет соответствовать как плавающим, так и интигам , если вы хотите принять только десятичное число, используйте «^ [0-9] + \ . [0-9] + $ " – NSAnant

+0

действительно. поэтому непонятно, почему вы рекомендуете явно использовать _not_. – holex

Смежные вопросы