我想将放置到 NSTextField/UITextField 中的任何文本格式化为看起来像
###-###-####
这里有一些可能的输入
1112223333
111.222.3333
(111)222-3333
(111) 2223333
最佳答案
我已经测试了这段代码,它适用于您的所有示例:
- (NSString *)convertNumber:(NSString *)input {
NSMutableString *result = [NSMutableString stringWithCapacity:15];
NSScanner *scanner = [NSScanner scannerWithString:input];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"];
NSString *temp;
NSInteger location = 0;
// Get first group
[scanner scanUpToCharactersFromSet:numbers intoString:&temp];
location = [scanner scanLocation];
[scanner scanCharactersFromSet:numbers intoString:&temp];
[result appendString:temp];
if ([scanner scanLocation] < location + 4) {
// Only scanned three numbers - get second group
[scanner scanUpToCharactersFromSet:numbers intoString:&temp];
location = [scanner scanLocation];
[scanner scanCharactersFromSet:numbers intoString:&temp];
[result appendString:temp];
if ([scanner scanLocation] < location + 4) {
// Only scanned three numbers - get last group
[scanner scanUpToCharactersFromSet:numbers intoString:&temp];
[scanner scanCharactersFromSet:numbers intoString:&temp];
[result appendString:temp];
}
} else if ([scanner scanLocation] < location + 7) {
// Scanned six numbers - get last group
[scanner scanUpToCharactersFromSet:numbers intoString:&temp];
[scanner scanCharactersFromSet:numbers intoString:&temp];
[result appendString:temp];
}
// Add dashes
if ([result length] > 6) {
[result insertString:@"-" atIndex:3];
[result insertString:@"-" atIndex:7];
}
return result;
}
3、3 和 4 组之间的任何数量的非数字字符(或无)都将被忽略。
警告:它可能会到处泄漏,如果输入意外,可能会崩溃。
关于objective-c - 如何格式化 NSTextField 或 UITextField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036661/