在IOS中将字符串“1234567890123456789”格式化为“1234 5678 9012 3456 789”的最简单方法是什么?
问问题
1916 次
5 回答
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 格式。例如,美国运通使用 xxxx xxxxxx xxxxxx 格式。您确实应该查看卡的前几位,确定卡的类型,并相应地对其进行格式化。
您问是否可以使用正则表达式来做到这一点。考虑这个正则表达式:
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”
虽然您可以使用正则表达式,但它足够不透明,我不会特别建议它。但这是可以完成的。
于 2013-08-20T16:34:46.380 回答
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;
}
于 2013-08-20T16:35:58.233 回答
0
我写了代码。
NSMutableString *string = @"1234567890123456789";
NSInteger *ip = 4;
for (NSInteger i = 0; i*4 < [string length] ; i++)
{
[string insertString:@" " atIndex:ip];
ip = ip+5;
}
于 2013-08-20T16:54:57.970 回答
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;
}
于 2014-11-06T08:39:07.273 回答
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)
对于斯威夫特 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
}
}
于 2017-06-16T10:32:54.890 回答