【发布时间】:2015-05-14 18:33:31
【问题描述】:
我正在尝试快速创建一个方法,该方法接受一个字符串并返回一个布尔值。如果字符串的货币格式正确,我想返回 true,否则返回 false。
到目前为止,这是我尝试过的方法:
func textIsValidCurrencyFormat(text: String) -> Bool {
var isValidCurrencyFormat = false
var numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
var number = numberFormatter.numberFromString(text)
if number != nil {
isValidCurrencyFormat = true
}
return isValidCurrencyFormat
}
问题:除了我还想使金额前后有空格的字符串无效以及此方法当前接受的小数点后有两个以上的数字之外,此方法有效。
目前我不在乎该方法是否根据货币类型(也称为美元或英镑或其他货币)返回真或假,但我可能希望将来也使用它来拒绝特定类型以外的货币.
编辑:
这是我想出的最终代码,它可以正确确定字符串是否以正确的货币格式输入并考虑到边缘情况。请在下面的 cmets 中添加任何建议!
func textIsValidCurrencyFormat(text: String) -> Bool {
var isValidCurrencyFormat = false
var numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
var number = numberFormatter.numberFromString(text)
if number != nil {
let numberParts = text.componentsSeparatedByString(".")
if numberParts.count == 2 {
let decimalArray = Array(numberParts[1])
if decimalArray.count <= 2 {
if text == text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) {
isValidCurrencyFormat = true
}
}
} else {
if text == text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) {
isValidCurrencyFormat = true
}
}
}
return isValidCurrencyFormat
}
【问题讨论】:
-
管理输入会容易得多。看看这个答案stackoverflow.com/a/29783546/2303865
标签: ios swift currency string-interpolation