Objective c 如何将字符串格式化为信用卡格式
在IOS中,将字符串“12345678890123456789”格式化为“12345678 9012 3456 789”的最简单方法是什么 对于该特定格式,您可以执行如下操作,提取各个子字符串: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
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”
本身不是一个可变对象。仅供参考,如果您愿意,您也可以使用正则表达式来实现这一点(请参见我的修订答案),但我仍然倾向于算法方法。仅供参考,如果您愿意,您也可以使用正则表达式来实现这一点(见我修改后的答案),但我仍然倾向于算法方法。