【问题标题】:NSString: Validate it is in US currency formatNSString:验证它是美国货币格式
【发布时间】:2013-04-10 14:02:32
【问题描述】:

有没有一种快速的方法来验证 NSString 是否被格式化为美国货币?

所以我要确认的是字符 0 是 $,以下字符是数字,除了 string.length-3 可能是小数(显示更改是可选的)。

因此,这通过了 $1000.00,并且通过了 $1000,但这将失败 $1000B。

谢谢

【问题讨论】:

标签: ios nsstring currency


【解决方案1】:

一种简单的方法是使用这个正则表达式来验证字符串:

^[$][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");
}

【讨论】:

  • 所以在你的例子中,改变这个 NSMakeRange(0, string.length) 会让它变得动态,对吧?
  • 在美国工作。有没有办法根据语言环境生成正则表达式?为了匹配用户的请求,我认为您需要在 $ 之后添加一个 ? 以使其成为可选。此外,需要为逗号扩展。
  • @PruitIgoe 这是正确的。我硬编码了7,因为我也硬编码了@"$321.00",但通常你需要提供正确的长度。
  • @MarcusAdams 这是设计使然:OP 询问了美元。使用NSNumberFormatterCurrencyStyle 解决方案将接受英国的£12.34 和德国的12.34€,这可能是可取的,也可能不是。
  • 很好很完整的答案!!
【解决方案2】:

NSNumberFormatter不仅有stringFromNumber,还有numberFromString

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

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2018-08-20
相关资源
最近更新 更多