使用千位分隔符Swift检查Ints时出错

时间:2016-06-20 19:04:53

标签: swift string

我想错误检查Swift中的整数条目,以便:

  1. 接受那些没有千位分隔符的整数,
  2. 接受在正确位置有数千个分隔符的整数,
  3. 在错误的地方有数千个分隔符的整数被拒绝,
  4. 非整数被拒绝。
  5. 我相信我有一个满足1,2和4但尚未满足3的解决方案。

    func makeInt( incoming: String ) {
        let tempValue = Int( incoming.stringByReplacingOccurrencesOfString( thousandSeparator, withString: "" ).stringByTrimmingCharactersInSet( NSCharacterSet.whitespaceCharacterSet() ) )
        if tempValue != nil {
            print( tempValue! )
        }
        else {
            print( "Life hurts" )
        }
    }
    
    makeInt( "1000" ) --> 1000
    makeInt( "1,000" ) --> 1000
    makeInt( "10,00" ) --> 1000 *Should be Life hurts*
    makeInt( "doggy" ) --> Life hurts
    

    我接下来要做的另一个地方是设置一个正则表达式,映射到数千个地方的千位分隔符,但在我去那里之前,我很好奇是否有任何其他方法可以做到这一点似乎是一个相当普遍的需求。

    非常感谢提前!

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来检查格式,但可能更容易使用为您进行此类验证的现有NSNumberFormatter,例如:

let formatter: NSNumberFormatter = {
    let _formatter = NSNumberFormatter()
    _formatter.numberStyle = .DecimalStyle
    return _formatter
}()

然后

func makeInt(incoming: String) {
    guard let value = formatter.numberFromString(incoming) else {
        print("Life hurts")
        return
    }

    print(value.integerValue)
}

这表明了您描述的行为。然后它还支持本地化(其中千位分隔符是根据用户的语言环境自动确定的。)