2013-04-10 37 views
1

是否有一个快速的方式,如果一个NSString的格式为美国货币验证?的NSString:验证它是在美国货币格式

所以我在寻找什么,以确认是字符0是$,下面的字符是除了string.length减-3数字可能是一个小数(示出其是可选的)。

所以这把$ 1000.00此经过1000 $,但这会失败$ 1000B。

感谢

+0

HTTP://计算器.com/questions/2369666/how-to-use-nsnumberformatter-for-currency-to-print-in-uitextfield – iPatel 2013-04-10 14:05:55

+0

你没有说明你在用什么(用户可编辑的文本字段,静态标签或?),但一般来说,任何答案都是LY利用NSNumberFormatter – 2013-04-10 14:06:00

+0

'^ \ $ \ d +的?(?:\。\ d {2})$' – Joe 2013-04-10 14:06:09

回答

3

NSNumberFormatter不仅具有stringFromNumber,但它也有numberFromString

NSString *string = @"$1,000.00"; 
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; 
NSNumber *number = [numberFormatter numberFromString:string]; 
if (number) { 
    // Success 
} 
+0

谢谢,这就是我一直在寻找的。 – PruitIgoe 2013-04-10 14:13:01

9

一个简单的方法将是使用此正则表达式来验证串:

^[$][0-9]+([.][0-9]{2})?$ 
^^^^^^^^^ 
| | | | | | | || 
| | | | | | | |+-- End-of-input marker 
| | | | | | | +--- Optional 
| | | | | | +------ Repeated exactly two times 
| | | | | +---------- A decimal digit 
| | | | +-------------- A dot (literal) 
| | | +----------------- Repeated once or more 
| | +-------------------- A decimal digit 
| +------------------------ The dollar sign (literal) 
+-------------------------- Start-of-input marker 

下面是一个使用上述表达式的样本代码:

NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression 
    regularExpressionWithPattern:@"^[$][0-9]+([.][0-9]{2})?$" 
         options:NSRegularExpressionCaseInsensitive 
          error:&error]; 
if ([regex numberOfMatchesInString:@"$321.05" options:0 range:NSMakeRange(0, 7)]) { 
    NSLog(@"Success"); 
} 
+1

我赞成了正则表达式的真棒解释! – PruitIgoe 2013-04-10 14:28:22

+0

所以在你的例子中改变这个NSMakeRange(0,string.length)会使它变成动态的,对吧? – PruitIgoe 2013-04-10 14:29:35

+0

在美国工作。有没有办法根据语言环境生成正则表达式?为了匹配用户的请求,我想你会希望在'$'之后加一个'?'来使其成为可选项。此外,需要扩展逗号。 – 2013-04-10 14:29:47