2012-07-27 41 views
0

我應該如何處理iOS中的文本格式?我不是在談論貨幣或小數位樣式。由於iOS沒有setFormat(),這有點複雜。CPF和CNPJ格式文本字段

我想要的兩種格式示例:123.456.789-10123.456.789/1000-00

我的目標是根據用戶類型設置文本字段的格式。例如,與任何常規網站一樣,您可以鍵入電話號碼。它不是來自模型或任何東西。用戶只需輸入數字,必要時我會插入".","/""-"

+1

你能對你想要做的事情做更具體的描述嗎?模型中的數據如何查看,最終看起來像您提供的示例字符串? – dasblinkenlight 2012-07-27 18:49:56

+0

@dasblinkenlight你是對的!編輯了這個問題。 – NSPunk 2012-07-27 18:59:04

+1

你看過[數據格式指南](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/DataFormatting/DataFormatting.html)嗎?你有[看看周圍所以](http://stackoverflow.com/search?q=%5Bios%5D+formatting+text+field)?該搜索的熱門搜索:[電話號碼格式](http://stackoverflow.com/questions/6052966/phone-number-formatting)。 – 2012-07-27 19:10:57

回答

3

您可以使用正則表達式來完成的格式化,像這樣:

NSRegularExpression *fmt = [NSRegularExpression 
    regularExpressionWithPattern:@"(.{1,3})(.{1,3})(.{1,3})(.{1,2})" 
         options:0 
          error:NULL]; 
NSMutableString *str = [NSMutableString stringWithString:@"12345678910"]; 
[fmt replaceMatchesInString:str 
        options:0 
         range:NSMakeRange(0, str.length) 
       withTemplate:@"$1.$2.$3-$4"]; 

這把字符串轉換123.456.789-10

爲了以用戶身份動態應用此格式鍵入,首先創建NSRegularExpression *fmt,將其存儲在您的UITextFieldDelegate中,並在您的textField:shouldChangeCharactersInRange:replacementString:方法中使用它。

+0

哇!我就是這個意思!!偉大的答案! – NSPunk 2012-07-27 19:15:12

+0

@NSPunk嗯,我還沒有嘗試過使用這個字段格式,所以你可能會發現它不像一些簡單的替代品不依賴於正則表達式那樣的性能。無論如何,試試吧,讓我知道它是否有效。如果您不再尋找改進的答案,請考慮通過點擊複選標記的大綱來接受答案;這也將爲您贏得堆棧溢出的全新徽章。 – dasblinkenlight 2012-07-27 19:21:45

+0

是的,我相信我已經找到了最好的答案! – NSPunk 2012-07-27 19:25:02

1

我幾天前創建了我自己的方法來檢查有效的溫度輸入。這是一個有點疼痛,以及因爲我要檢查: - 只有數 - 只有一個小數點 - 如果有一個負號它必須在前面

我最終使用[my string characterAtIndex:index];並檢查每個字符,因爲我不會超過4個字符。

編輯:

下面是一些僞代碼

for (every char in your string) 
    if(the index of the char % 3 == 2) //every third char, 0,2,5... 
     the char must be a . or/or - 

    else 
     the char must be a number 
+0

是的,那也是我最初的想法,但想想它真的很痛苦! – NSPunk 2012-07-27 18:43:29

+0

是的,您需要確保每個第三個字符都是小數點,短劃線或斜線,這會花費很多if語句。你也可以使用'NSCharacterSets',或者如果你知道正則表達式(正則表達式),你可以使用它們。 – BloonsTowerDefence 2012-07-27 18:49:09

+0

想想吧,它不會太多if/else語句...我已經編輯了一些僞代碼到我的答案 – BloonsTowerDefence 2012-07-27 18:51:54