objective-c - 如何格式化 NSTextField 或 UITextField?

标签 objective-c nsstring uitextfield format nstextfield

我想将放置到 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/

相关文章:

objective-c - 如何通过引用传递和设置 CGFloat?

ios - 使用 OpenCV 从 UIImage 中检测图像对象

ios - 使用最新的 SDK 从谷歌驱动器下载文件?

iphone - 如何将 CGFloat 设置为 UILabel 的文本属性

ios - UiTextfield-首字母必须为0

ios - *** 由于未捕获的异常 'NSInternalInconsistencyException' 而终止应用程序,原因 : 'Tried to pop to a view controller that doesn' t exist. '

ios - 单个 NSString 的样式 plist 输出

swift - 无法在 Label.text 中转换 NSString

ios - 全局访问 UIalertview 中的文本字段数据

ios - UITEXTFIELD 输入数据到警告框 ok clicked