Как мы можем проверить, состоит ли строка только из чисел? Я беру подстроку из строки и хочу проверить, числовая это подстрока или нет.
NSString *newString = [myString substringWithRange:NSMakeRange(2,3)];
iphone
objective-c
cocoa-touch
ios
nsstring
Абхинав
источник
источник
.
символа[[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet]]
invertedSet
он возвращает класс, который обертывает созданный им набор и возвращает противоположное значение для всех запросов. Но точно не знаю.Я бы предложил использовать
numberFromString:
метод из класса NSNumberFormatter , как если бы число недействительно, оно вернет nil; в противном случае он вернет вам NSNumber.источник
NO
для вашей строки вернутся и NSNumberFormatter, и NSScanner . Также стоит знать: они также возвращаютсяYES
для чисел, заполненных пробелами. Кстати, я только что добавил к вашему ответу фрагмент кода, надеюсь, вы не против.Проверяйте по регулярному выражению, по шаблону
"^[0-9]+$"
, используя следующий метод-validateString:withPattern:
."^[0-9]+(.{1}[0-9]+)?$"
"."
."^[0-9]{4}$"
."."
, а длина от 2 до 5."^[0-9]{2,5}$"
."^-?\d+$"
Регулярное выражение можно проверить на онлайн-сайте .
Вспомогательная функция выглядит следующим образом.
Версия Swift 3:
Тест на детской площадке.
источник
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 }
И получил ошибкуPlayground execution aborted: error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
return matchRange.location != NSNotFound;
^-?\d+$
, я проверил это на сайте: regex101.comВы можете создать NSScanner и просто просканировать строку:
Ознакомьтесь с документацией NSScanner, чтобы выбрать из дополнительных методов.
источник
isAtEnd
.Я думаю, что самый простой способ проверить, что каждый символ в данной строке является числовым:
Используйте один из других фабричных методов NSCharacterSet, если вы хотите полностью контролировать допустимые символы.
источник
Этот первоначальный вопрос касался Objective-C, но он также был задан за много лет до анонса Swift. Итак, если вы пришли сюда из Google и ищете решение, использующее Swift, то вот вам:
источник
Решение Swift 3, если необходимо убедиться, что строка состоит только из цифр:
источник
.inverted
и других действий.чтобы было ясно, это функции для целых чисел в строках.
вот небольшая вспомогательная категория, основанная на ответе Джона выше:
в файле .h
в файле .m
использование:
источник
Решение Swift 3 может быть таким:
источник
Ответ Джона Калсбека почти правильный, но опускает некоторые крайние случаи Unicode.
Согласно документации
decimalDigitCharacterSet
, этот набор включает все символы, отнесенные к категории Unicode какNd
. Таким образом, их ответ будет принимать, среди прочего:१
(U + 0967 DEVANAGARI DIGIT ONE)᠑
(U + 1811 MONGOLIAN DIGIT ONE)𝟙
(U + 1D7D9 МАТЕМАТИЧЕСКАЯ ДВОЙНАЯ СТРУКТУРА ЦИФРА ОДИН)Хотя в некотором смысле это правильно - каждый символ в
Nd
действительно соответствует десятичной цифре - это почти наверняка не то, что ожидал спрашивающий. На момент написания этой статьи существует 610 кодовых точек, отнесенных к категорииNd
, только десять из которых являются ожидаемыми символами0
(от U + 0030) до9
(U + 0039).Чтобы решить проблему, просто укажите именно те символы, которые допустимы:
источник
Еще один вариант:
Пример использования:
источник
Расширение ответа @John Calsbeek и разъяснение комментариев @Jeff и @gyratory circus .
Следующие элементы могут быть добавлены как методы категорий для
NSString
источник
Проверьте, является ли строка числом. Может быть полезно
источник
Быстрое расширение:
источник
Для Swift 3
источник
Когда у вас есть цифры из смешанных языков , которые используют (или не используют) форматы цифр 0-9, вам нужно будет запустить регулярное выражение, которое будет искать любое число, следующее - преобразовать все цифры в 0- 9 формат (если вам нужно фактическое значение):
источник
Самый простой и надежный способ - это попытаться преобразовать как
Double
, если результат будетnil
- он не может быть преобразован в правильное число.Дополнительная информация в документации: https://developer.apple.com/documentation/swift/double/2926277-init
источник
Simple написал расширение строки:
источник