Подтвердить что ты не робот

Как проверить строку или номер

У меня есть массив ["abc", "94761178","790"]

Я хочу выполнить итерацию каждого и проверить, является ли String или Integer?

Как это проверить?

Как преобразовать "123" в целое число 123

4b9b3361

Ответ 1

Изменить Swift 2.2:

В быстрой версии 2.2 используйте Int(yourArray[1])

var yourArray = ["abc", "94761178","790"]
var num = Int(yourArray[1])
if num != nil {
 println("Valid Integer")
}
else {
 println("Not Valid Integer")
}

Он покажет вам, что строка действительна целым числом, а num содержит допустимый Int. Вы можете выполнять вычисления с помощью num.

Из документов:

Если строка представляет целое число, которое вписывается в Int, возвращает соответствующее целое число. Это принимает строки, соответствующие регулярному выражение "[- +]? [0-9] +" только.

Ответ 2

Вот небольшая версия Swift, использующая расширение String:

Свифт 3/Свифт 4:

extension String  {
    var isNumber: Bool {
        return !isEmpty && rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
    }
}

Свифт 2:

   extension String  {
        var isNumber : Bool {
            get{
                return !self.isEmpty && self.rangeOfCharacterFromSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet) == nil
            }
        }
   }

Ответ 3

Помните, что проверка строки/числа с помощью инициализатора Int имеет ограничения. В частности, максимальное значение 2 ^ 32-1 или 4294967295. Это может привести к проблемам, так как номер телефона 8005551234 не сможет выполнить проверку Int(8005551234), несмотря на то, что он действительный номер.

Более безопасный подход заключается в использовании NSCharacterSet для проверки любых символов, соответствующих десятичному набору в диапазоне строки.

let number = "8005551234"
let numberCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet
if !number.isEmpty && number.rangeOfCharacterFromSet(numberCharacters) == nil {
    // string is a valid number
} else {
    // string contained non-digit characters
}

Кроме того, было бы полезно добавить это расширение String.

public extension String {

    func isNumber() -> Bool {
        let numberCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet
        return !self.isEmpty && self.rangeOfCharacterFromSet(numberCharacters) == nil
    }

}

Ответ 4

Начиная с Swift 2, String.toInt() был удален. Вводился новый Int Initializer: Int (str: String)

for target in ["abc", "94761178","790"]
{
  if let number = Int(target)
  {
     print("value: \(target) is a valid number. add one to get :\(number+1)!")
  }
  else
  {
    print("value: \(target) is not a valid  number.")
  }
}

Ответ 5

Я думаю, что самое хорошее решение:

extension String {
    var isNumeric : Bool {
        return Double(self) != nil
    }
}

Ответ 6

Swift 3, 4

extension String {
    var isNumber: Bool {
        let characters = CharacterSet.decimalDigits.inverted
        return !self.isEmpty && rangeOfCharacter(from: characters) == nil
    }
}

Ответ 7

Правильный способ - использовать метод toInt() String и необязательную привязку, чтобы определить, удалось ли преобразование или нет. Итак, ваша петля будет выглядеть так:

let myArray = ["abc", "94761178","790"]

for val in myArray {
    if let intValue = val.toInt() {
        // It an int
        println(intValue)
    } else {
        // It not an int
        println(val)
    }
}

Метод toInt() возвращает Int?, поэтому необязательный Int, который nil, если строка не может быть преобразована в целую сумму или значение Int (завернутое в необязательное), если преобразование завершается успешно.

Документация по методу (показана с использованием CMD + щелчка на toInt в Xcode):

Если строка представляет целое число, которое помещается в Int, возвращает соответствующее целое число. Это принимает строки, которые соответствуют регулярному выражению "[- +]? [0-9] +".

Ответ 8

Этот способ работает также со строками со смешанными номерами:

public extension String {
func isNumber() -> Bool {
    return !self.isEmpty && self.rangeOfCharacter(from: CharacterSet.decimalDigits) != nil && self.rangeOfCharacter(from: CharacterSet.letters) == nil
}}

Итак, получилось что-то вроде этого: введите описание изображения здесь

Ответ 9

версия Swift 3.0

func isNumber(stringToTest : String) -> Bool {
    let numberCharacters = CharacterSet.decimalDigits.inverted
    return !s.isEmpty && s.rangeOfCharacter(from:numberCharacters) == nil
}

Ответ 10

Если вы хотите принять более тонкий подход (т.е. принять число, например, 4,5 или 3е10), выполните следующие действия:

func isNumber(val: String) -> Bool
{
   var result: Bool = false
   let parseDotComNumberCharacterSet = NSMutableCharacterSet.decimalDigitCharacterSet()
   parseDotComNumberCharacterSet.formUnionWithCharacterSet(NSCharacterSet(charactersInString: ".e"))

            let noNumberCharacters = parseDotComNumberCharacterSet.invertedSet
            if let v = val
            {
                result = !v.isEmpty && v.rangeOfCharacterFromSet(noNumberCharacters) == nil
            }
   return result
}

Для лучшего разрешения вы можете использовать регулярное выражение.

Ответ 11

Xcode 8 и Swift 3.0

Мы также можем проверить:

 //MARK: - NUMERIC DIGITS
        class func isString10Digits(ten_digits: String) -> Bool{

            if !ten_digits.isEmpty {

                let numberCharacters = NSCharacterSet.decimalDigits.inverted
                return !ten_digits.isEmpty && ten_digits.rangeOfCharacter(from: numberCharacters) == nil 
            }
            return false
        }

Ответ 12

Этот код работает для меня для Swift 3/4

  func isNumber(textField: UITextField) -> Bool {
    let allowedCharacters = CharacterSet.decimalDigits
    let characterSet = CharacterSet(charactersIn: textField.text!)
    return allowedCharacters.isSuperset(of: characterSet)
  //        return true 
  }

Ответ 13

Я думаю, использование NumberFormatter - это простой способ: (Swift 5)

import Foundation

extension String {

    var isNumeric : Bool {
        return NumberFormatter().number(from: self) != nil
    }

}

Ответ 14

Получите следующую функцию isInteger() из следующего сообщения stackoverflow, отправленного corsiKa: Определить, является ли String целым в Java

И я думаю, что это то, что вы хотите сделать (где nameOfArray - это массив, который вы хотите передать)

void convertStrArrayToIntArray( int[] integerArray ) {

    for (int i = 0; i < nameOfArray.length(); i++) {
        if (!isInteger(nameOfArray[i])) {
            integerArray[i] = nameOfArray[i].toString();
        }
    }

}