检查字符串是否已经是货币字符串?

时间:2014-10-25 13:45:00

标签: ios swift ios8

我想创建一个查看字符串的函数,如果它是一个十进制字符串,则将其作为货币格式的字符串返回。下面的函数可以做到这一点,但是如果我传入一个已经格式化的字符串,它当然会失败(它希望看到像' 25'或&#39这样的字符串; 25.55'但' $ 15.25'

有没有办法在下面修改我的功能,添加另一个条件,说明"如果您已经格式化为货币字符串,或者您的字符串格式不正确,请返回X&# 34; (也许X将是0,或者它可能是自我(相同的字符串)我还不确定)。

func toCurrencyStringFromDecimalString() -> String
{
    var numberFormatter = NSNumberFormatter()
    numberFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle

    if (self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).utf16Count == 0)
    {
        //If whitespace is passed in, just return 0.0 as default
        return numberFormatter.stringFromNumber(NSDecimalNumber(string: "0.0"))!
    }
    else if (IS_NOT_A_DECIMAL_OR_ALREADY_A_CURRENCY_STRING)
    {
        //So obviously this would go here to see if it's not a decimal (or already contains a current placeholder etc)
    }
    else
    {
        return numberFormatter.stringFromNumber(NSDecimalNumber(string: self))!
    }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

听起来你需要使用NSScanner

根据docsscanDecimal的{​​{1}}函数:

  

在溢出的情况下跳过多余的数字,所以接收器的   position超过整个整数表示。

     

以NULL作为值调用此方法,以便只扫描十进制整数表示。

我一直主要用Obj-C编程,所以我的Swift是垃圾,但这是我试图翻译用于检测数字字符串的相应代码(也在this answer中演示):

NSScanner

如果字符串不是十进制表示,let scanner: NSScanner = NSScanner(string:self) let isNumeric = scanner.scanDecimal(nil) && scanner.atEnd 应该返回false。