2

我想写一个UITextField可以自动将数字格式化为银行号码的。

例如:输入1234567890098765会自动显示为1234 5678 9009 8765.

我会使用textFieldDelegate它,但我不知道如何使用NSNumberFormatter.

我该怎么做?

4

3 回答 3

9

使用NSNumberFormatter很简单。

NSNumber *number = [NSNumber numberWithLongLong:1234567890098765];
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setUsesGroupingSeparator:YES];
[formatter setGroupingSize:3];
// [formatter setGroupingSeparator:@"\u00a0"];
NSString *string = [formatter stringFromNumber:number];

I deliberately commented the line that sets the formatter's grouping separator as it may be better to use the default one, which is provided by the user's locale (e.g. , in the USA, . in Germany and ' in Switzerland). Also please note that iOS doesn't use a space as a separator but a non-breaking space (U+00A0).

于 2013-01-16T15:19:32.683 回答
0

试试这个 :-

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

   NSString *text = [textField text];

    NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];
    string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
    if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
        return NO;
    }

    text = [text stringByReplacingCharactersInRange:range withString:string];
    text = [text stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSString *newString = @"";
    while (text.length > 0) {
        NSString *subString = [text substringToIndex:MIN(text.length, 4)];
        newString = [newString stringByAppendingString:subString];
        if (subString.length == 4) {
            newString = [newString stringByAppendingString:@" "];
        }
        text = [text substringFromIndex:MIN(text.length, 4)];
    }

    newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];

    if (newString.length >= 20) {
        return NO;
    }

    [textField setText:newString];

    return NO;
    }

希望这可以帮助你..

于 2013-01-16T13:45:26.010 回答
0

我有一个 c++ 解决方案,也许你可以把你的字符串改成 cstring 然后改回来

char s[50]={'\0'},ch[99]={'\0'};
int i,j,k,len;
printf("input a string:\n");
scanf("%s",s);
len=strlen(s);
k=0;
for(i=0;i<len;i+=4)
{
    for(j=0;j<4;j++)
    {
        *(ch+k)=*(s+i+j);
        k++;

    }
        *(ch+k)=' ';
        k++;
}
printf("%s\n",ch);
于 2013-01-16T14:53:02.443 回答