swift 过滤字符串_swift-如何检查字符串或数字

swift-如何检查字符串或数字

我有一个数组["abc", "94761178","790"]

我想迭代每个并检查是字符串还是整数?

如何检查呢?

如何将“ 123”转换为整数123

user3675188 asked 2019-12-30T19:49:58Z

14个解决方案

52 votes

这是一个使用String扩展的小型Swift版本:

迅捷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

}

}

}

CryingHippo answered 2019-12-30T19:50:56Z

48 votes

编辑Swift 2.2:

在Swift 2.2中使用num

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] +”。

codester answered 2019-12-30T19:50:27Z

42 votes

请注意,使用String初始化程序检查字符串/数字是有限制的。 具体来说,最大值为2 ^ 32-1或4294967295。这可能会导致问题,因为8005551234的电话号码尽管是有效号码,但仍无法通过Int(8005551234)检查。

一种更安全的方法是使用String检查与字符串范围内的十进制设置匹配的所有字符。

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

}

}

Kyle Clegg answered 2019-12-30T19:51:25Z

20 votes

从Swift 2开始,String.toInt()被删除。引入了新的Int初始化程序: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.")

}

}

AMTourky answered 2019-12-30T19:51:45Z

9 votes

我认为最好的解决方案是:

extension String {

var isNumeric : Bool {

return Double(self) != nil

}

}

Bence Pattogato answered 2019-12-30T19:52:05Z

6 votes

斯威夫特3,4

extension String {

var isNumber: Bool {

let characters = CharacterSet.decimalDigits.inverted

return !self.isEmpty && rangeOfCharacter(from: characters) == nil

}

}

Said Sikira answered 2019-12-30T19:52:25Z

4 votes

正确的方法是使用Int?的toInt方法和可选绑定来确定转换是否成功。 所以你的循环看起来像:

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

for val in myArray {

if let intValue = val.toInt() {

// It's an int

println(intValue)

} else {

// It's not an int

println(val)

}

}

toInt方法返回Int?,因此是可选的Int,如果无法将字符串转换为整数,则为nil,如果转换成功,则返回Int值(包含在可选项中)。

方法文档(使用CMD并单击Xcode中的toInt所示)表示:

如果字符串表示适合Int的整数,则返回相应的整数。 这只接受与正则表达式“ [-+]?[0-9] +”匹配的字符串。

Antonio answered 2019-12-30T19:52:59Z

3 votes

这种方式也适用于带混合数字的字符串:

public extension String {

func isNumber() -> Bool {

return !self.isEmpty && self.rangeOfCharacter(from: CharacterSet.decimalDigits) != nil && self.rangeOfCharacter(from: CharacterSet.letters) == nil

}}

所以你得到这样的事情:

Boris answered 2019-12-30T19:53:23Z

3 votes

我认为使用NumberFormatter是一种简单的方法:(迅速5)

import Foundation

extension String {

var isNumeric : Bool {

return NumberFormatter().number(from: self) != nil

}

}

Amir Khorsandi answered 2019-12-30T19:53:43Z

1 votes

Swift 3.0版本

func isNumber(stringToTest : String) -> Bool {

let numberCharacters = CharacterSet.decimalDigits.inverted

return !s.isEmpty && s.rangeOfCharacter(from:numberCharacters) == nil

}

Mohamed Arradi Alaoui answered 2019-12-30T19:54:03Z

0 votes

如果您想接受更细粒度的方法(即接受4.5或3e10之类的数字),请按以下步骤操作:

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

}

为了获得更好的分辨率,您可以使用正则表达式。

0 votes

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

}

Anil Gupta answered 2019-12-30T19:54:51Z

0 votes

此代码对我适用于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

}

Thiru P answered 2019-12-30T19:55:11Z

-4 votes

从以下由corsiKa发布的stackoverflow发布中获取以下isInteger()函数:确定字符串在Java中是否为整数

我想这就是您想要做的(其中nameOfArray是您要传递的数组)

void convertStrArrayToIntArray( int[] integerArray ) {

for (int i = 0; i < nameOfArray.length(); i++) {

if (!isInteger(nameOfArray[i])) {

integerArray[i] = nameOfArray[i].toString();

}

}

}

Ian Fell answered 2019-12-30T19:55:35Z


版权声明:本文为weixin_39562089原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。