Objective c 如何将字符串格式化为信用卡格式

Objective c 如何将字符串格式化为信用卡格式,objective-c,cocoa-touch,string-formatting,Objective C,Cocoa Touch,String Formatting,在IOS中,将字符串“12345678890123456789”格式化为“12345678 9012 3456 789”的最简单方法是什么 对于该特定格式,您可以执行如下操作,提取各个子字符串: NSString *string = @"1234567890123456789"; NSMutableArray *array = [NSMutableArray array]; for (NSInteger i = 0; i < [string length]; i += 4) [ar

在IOS中,将字符串“12345678890123456789”格式化为“12345678 9012 3456 789”的最简单方法是什么

对于该特定格式,您可以执行如下操作,提取各个子字符串:

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:@" "];
将转换以下任何一项:

@"1234567890123456789" @"1234-5678-9012-3456-789" @" 1234567890123456789 " @"1234567890123456789" @"1234-5678-9012-3456-789" @" 1234567890123456789 " 进入:

@"1234 5678 9012 3456 789"
虽然可以使用正则表达式,但它非常不透明,我不会特别建议使用它。但这是可以做到的。

对于特定格式,您可以执行如下操作,提取单个子字符串:

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:@" "];
将转换以下任何一项:

@"1234567890123456789" @"1234-5678-9012-3456-789" @" 1234567890123456789 " @"1234567890123456789" @"1234-5678-9012-3456-789" @" 1234567890123456789 " 进入:

@"1234 5678 9012 3456 789" 虽然可以使用正则表达式,但它非常不透明,我不会特别建议使用它。但这是可以做到的。

试试这个:

-(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;
}
-(NSString*)correctString:(NSString*)anyStr{
NSMutableString*str=[NSMutableString stringWithString:anyStr];
int indx=4;
而(indx试试这个:

-(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;
}
-(NSString*)correctString:(NSString*)anyStr{
NSMutableString*str=[NSMutableString stringWithString:anyStr];
int indx=4;
而(indx我写了代码

NSMutableString *string = @"1234567890123456789"; 

NSInteger *ip = 4;

for (NSInteger i = 0; i*4 < [string length] ; i++)
{
    [string insertString:@" " atIndex:ip];
    ip = ip+5;
}
NSMutableString*string=@“12345678900123456789”;
NSInteger*ip=4;
对于(NSInteger i=0;i*4<[字符串长度];i++)
{
[字符串插入字符串:@“atIndex:ip];
ip=ip+5;
}
我写了代码

NSMutableString *string = @"1234567890123456789"; 

NSInteger *ip = 4;

for (NSInteger i = 0; i*4 < [string length] ; i++)
{
    [string insertString:@" " atIndex:ip];
    ip = ip+5;
}
NSMutableString*string=@“12345678900123456789”;
NSInteger*ip=4;
对于(NSInteger i=0;i*4<[字符串长度];i++)
{
[字符串插入字符串:@“atIndex:ip];
ip=ip+5;
}

我建议使用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;
}
-(NSString*)信用卡号格式字符串{
NSString*string=[自复制];
NSU整数长度=string.length;
如果(长度>=17){
字符串=[string substringToIndex:16];
长度=16;
}
BOOL isSpaceRequired=是;
如果(长度==4){
isSpaceRequired=否;
}
NSString*newString=[NSString new];
while(string.length>0){
NSString*subString=[string substringToIndex:MIN(string.length,4)];
newString=[newstringstringbyappendingstring:subString];
if(subString.length==4&&isSpaceRequired){
newString=[newstringstringbyappendingstring:@'';
}
string=[string substringfromfromindex:MIN(string.length,4)];

如果(string.length我建议使用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;
}
-(NSString*)信用卡号格式字符串{
NSString*string=[自复制];
NSU整数长度=string.length;
如果(长度>=17){
字符串=[string substringToIndex:16];
长度=16;
}
BOOL isSpaceRequired=是;
如果(长度==4){
isSpaceRequired=否;
}
NSString*newString=[NSString new];
while(string.length>0){
NSString*subString=[string substringToIndex:MIN(string.length,4)];
newString=[newstringstringbyappendingstring:subString];
if(subString.length==4&&isSpaceRequired){
newString=[newstringstringbyappendingstring:@'';
}
string=[string substringfromfromindex:MIN(string.length,4)];

如果(string.length这里是一个快速扩展:

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
    }
}
对于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
    }
}
扩展字符串{
变量对:[字符串]{
变量结果:[字符串]=[]
设chars=数组(字符)
对于步幅索引(从:0到:chars.count,按:4){

result.append(String)(chars[索引..这里是一个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
    }
}
对于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
    }
}
扩展字符串{
变量对:[字符串]{
变量结果:[字符串]=[]
设chars=数组(字符)
对于步幅索引(从:0到:chars.count,按:4){

结果。追加(字符串(字符)[索引..我认为用正则表达式格式化字符串的方法会更短,但效果很好。我认为用正则表达式格式化字符串的方法会更短,但效果很好。1.我认为你的意思是
NSInteger ip=4;
没有星号。你应该用星号来表示对象,但是
NSInteger
是n我想你指的是
NSMutableString*string=[@“1234567890123456789”mutableCopy];
NSMutableString*string=[nsmutablestringwithstring:@“12345678900123456789]”;
,因为
@“12345678901213456789”
本身不是一个可变对象。1.我想你的意思是
NSInteger ip=4;
没有星号。你应该在对象中使用星号,但
NSInteger
不是一个对象。2.我想你的意思是
NSMutableString*string=[@“12345678900123456789”mutableCopy];
NSMutableString*string=[NSMutableString stringWithString:@“1234567890123456789”];
,因为
@“1234567890123456789”
本身不是一个可变对象。仅供参考,如果您愿意,您也可以使用正则表达式来实现这一点(请参见我的修订答案),但我仍然倾向于算法方法。仅供参考,如果您愿意,您也可以使用正则表达式来实现这一点(见我修改后的答案),但我仍然倾向于算法方法。