我想写一个UITextField
可以自动将数字格式化为银行号码的。
例如:输入1234567890098765
会自动显示为1234 5678 9009 8765
.
我会使用textFieldDelegate
它,但我不知道如何使用NSNumberFormatter
.
我该怎么做?
我想写一个UITextField
可以自动将数字格式化为银行号码的。
例如:输入1234567890098765
会自动显示为1234 5678 9009 8765
.
我会使用textFieldDelegate
它,但我不知道如何使用NSNumberFormatter
.
我该怎么做?
使用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
).
试试这个 :-
-(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;
}
希望这可以帮助你..
我有一个 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);