2013-04-10 57 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