2012-07-27 39 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