在IOS中将字符串“1234567890123456789”格式化为“1234 5678 9012 3456 789”的最简单方法是什么?
答案 0 :(得分:3)
对于该特定格式,您可以执行以下操作,提取单个子字符串:
NSString *string = @"1234567890123456789";
NSMutableArray *array = [NSMutableArray array];
for (NSInteger i = 0; i < [string length]; i += 4)
[array addObject:[string substringWithRange:NSMakeRange(i, MIN(4, [string length] - i))]];
NSString *result = [array componentsJoinedByString:@" "];
问题是,并非所有信用卡都符合xxxx xxxx xxxx xxxx格式。例如,Amex使用xxxx xxxxxx xxxxx格式。你真的应该看看卡的第一个数字,确定卡的类型,并相应地格式化。
您问是否可以使用正则表达式执行此操作。考虑一下这个正则表达式:
NSString *result = [string stringByReplacingOccurrencesOfString:@"^[\\s-]*([0-9]{4})[\\s-]*([0-9]{4})[\\s-]*([0-9]{4})[\\s-]*([0-9]{4})[\\s-]*([0-9]{3})[\\s-]*$"
withString:@"$1 $2 $3 $4 $5"
options:NSRegularExpressionSearch
range:NSMakeRange(0, [string length])];
这将转换以下任何内容:
@"1234567890123456789" @"1234-5678-9012-3456-789" @" 1234567890123456789 "
成:
@"1234 5678 9012 3456 789"
虽然你可以使用正则表达式,但它是非常不透明的,我不会特别建议它。但它可以做到。
答案 1 :(得分:3)
试试这个:
-(NSString *) correctString:(NSString *) anyStr {
NSMutableString *str=[NSMutableString stringWithString:anyStr];
int indx=4;
while (indx<str.length) {
[str insertString:@" " atIndex:indx];
indx +=5;
}
anyStr=str;
return anyStr;
}
答案 2 :(得分:0)
我写了代码。
NSMutableString *string = @"1234567890123456789";
NSInteger *ip = 4;
for (NSInteger i = 0; i*4 < [string length] ; i++)
{
[string insertString:@" " atIndex:ip];
ip = ip+5;
}
答案 3 :(得分:0)
我建议使用NSString类别。在非ARC中,只需在自我复制后添加自动释放。 如果不是必要的话,我的变体将不会在最后一个数字季度之后添加空格。 适用于UITextField。
- (NSString *)creditCardNumberFormatedString {
NSString *string = [self copy];
NSUInteger length = string.length;
if (length >= 17) {
string = [string substringToIndex:16];
length = 16;
}
BOOL isSpaceRequired = YES;
if (length == 4) {
isSpaceRequired = NO;
}
NSString *newString = [NSString new];
while (string.length > 0) {
NSString *subString = [string substringToIndex:MIN(string.length, 4)];
newString = [newString stringByAppendingString:subString];
if (subString.length == 4 && isSpaceRequired) {
newString = [newString stringByAppendingString:@" "];
}
string = [string substringFromIndex:MIN(string.length, 4)];
if (string.length <= 4) {
isSpaceRequired = NO;
}
}
return newString;
}
答案 4 :(得分:0)
这是一个Swift扩展名:
extension String {
var pairs: [String] {
var result: [String] = []
let chars = Array(characters)
for index in 0.stride(to: chars.count, by: 4) {
result.append(String(chars[index..<min(index+4, chars.count)]))
}
return result
}
}
使用:
let string : String = "1234567890123456789"
let finalString = string.pairs.joinWithSeparator(" ") //1234 5678 9012 3456 789
print(finalString)
对于Swift 3:
extension String {
var pairs: [String] {
var result: [String] = []
let chars = Array(characters)
for index in stride(from: 0, to: chars.count, by: 4){
result.append(String(chars[index..<min(index+4, chars.count)]))
}
return result
}
}