【问题标题】:How to format NSString into a phone number in the USA?如何将 NSString 格式化为美国的电话号码?
【发布时间】:2012-07-09 23:51:00
【问题描述】:

我有一个简单的应用程序,可以帮助招聘人员在活动中收集信息。一个表单字段用于输入电话号码,我想要一种简单的方法来在用户键入时重新格式化电话号码。

电话号码应随着用户键入而变化,因此一串数字的示例输出应如下所示:

1
1 (20)
1 (206) 55
1 (206) 555-55
1 (206) 555-5555

或者,如果用户没有在区号前输入 1,电话号码会演变成这样:

(20)
(206) 55
(206) 555-55
(206) 555-5555

如果电话号码太长,那么它应该只显示一串普通的数字:

20655555555555555

【问题讨论】:

    标签: ios objective-c nsstring uitextfield phone-number


    【解决方案1】:

    这就是我所做的:UITextFieldDelegate 通过获取UITextField 的文本并运行我编写的一个小方法来处理textField:shouldChangeCharactersInRange :replacementString: 方法:

    -(void)updatePhoneNumberWithString:(NSString *)string {
    
        NSMutableString *finalString = [NSMutableString new];
        NSMutableString *workingPhoneString = [NSMutableString stringWithString:string];
    
        if (workingPhoneString.length > 0) {
        //This if statement prevents errors when the user deletes the last character in the textfield.
    
            if ([[workingPhoneString substringToIndex:1] isEqualToString:@"1"]) {
            //If the user typed a "1" as the first digit, then it's a prefix before the area code.
                [finalString appendString:@"1 "];
                [workingPhoneString replaceCharactersInRange:NSMakeRange(0, 1) withString:@""];
            }
    
            if (workingPhoneString.length < 3) {
            //If the user is dialing the area code...
                [finalString appendFormat:[NSString stringWithFormat:@"(%@)", workingPhoneString]];
    
            } else if (workingPhoneString.length < 6) {
            //If the user is dialing the 3 digits after the area code...
                [finalString appendFormat:[NSString stringWithFormat:@"(%@) %@", 
                                           [workingPhoneString substringWithRange:NSMakeRange(0, 3)], 
                                           [workingPhoneString substringFromIndex:3]]];
    
            } else if (workingPhoneString.length < 11) {
            //If the user is dialing the last 4 digits of the phone number...
                [finalString appendFormat:[NSString stringWithFormat:@"(%@) %@-%@", 
                                           [workingPhoneString substringWithRange:NSMakeRange(0, 3)], 
                                           [workingPhoneString substringWithRange:NSMakeRange(3, 3)],
                                           [workingPhoneString substringFromIndex:6]]];
            } else {
            //If the user's typed in a bunch of characters, then just show the full string.
                finalString = phoneString;
            }
    
            phoneNumberField.text = finalString;
        } else {
        //If the user changed the textfield to contain no text at all...
            phoneNumberField.text = @"";
        }
    
    }
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2011-08-16
      • 2011-05-22
      相关资源
      最近更新 更多