【问题标题】:How do I format a UITextfield's text that happens to be a telephone number, in american style?如何以美式格式格式化恰好是电话号码的 UITextfield 文本?
【发布时间】:2015-01-17 11:17:33
【问题描述】:

假设我有这个号码 1234567890

我想要这种格式 (xxx) xxx-xxxx

所以在显示器上我希望它显示为 (123) 456-7890

我将如何实现这一目标?

我需要在文本字段上使用某种正则表达式吗?

感谢您的宝贵时间

【问题讨论】:

    标签: ios objective-c cocoa-touch swift uitextfield


    【解决方案1】:

    如果您使用的是 Swift:

    let phoneNum = activity["phoneNumber"] as String
    let digits = NSCharacterSet.decimalDigitCharacterSet().invertedSet as NSCharacterSet
    let filtered1 = phoneNum.componentsSeparatedByCharactersInSet(digits) as NSArray
    
    let filtered = filtered1.componentsJoinedByString("") as NSString
    
    if filtered.length == 11 {
        let formatted = NSString(format: "(%@) %@-%@", filtered.substringWithRange(NSMakeRange(1, 3)), filtered.substringWithRange(NSMakeRange(4, 3)), filtered.substringWithRange(NSMakeRange(7, 4))) as NSString
    
        phoneNumberField.text = formatted
    } else if filtered.length == 10 {
        let formatted = NSString(format: "(%@) %@-%@", filtered.substringWithRange(NSMakeRange(0, 3)), filtered.substringWithRange(NSMakeRange(3, 3)), filtered.substringWithRange(NSMakeRange(6, 4))) as NSString
    
        phoneNumberField.text = formatted
    }
    

    【讨论】:

      【解决方案2】:

      试试这样的:

          NSCharacterSet *digits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
          NSString *filtered = [[[textField text] componentsSeparatedByCharactersInSet: digits] componentsJoinedByString: @""];
      
          if ([filtered length] == 11) {
              NSString *formatted = [NSString stringWithFormat: @"(%@) %@-%@", [filtered substringWithRange: NSMakeRange(1, 3)], [filtered substringWithRange: NSMakeRange(4, 3)], [filtered substringWithRange: NSMakeRange(7, 4)]];
              [textField setText: formatted];
          } else if ([filtered length] == 10) {
              NSString *formatted = [NSString stringWithFormat: @"(%@) %@-%@", [filtered substringWithRange: NSMakeRange(0, 3)], [filtered substringWithRange: NSMakeRange(3, 3)], [filtered substringWithRange: NSMakeRange(6, 4)]];
              [textField setText: formatted];
          }
      

      【讨论】:

      • 工作得很好,让我迅速找到了答案
      【解决方案3】:

      尝试使用RMPhoneFormat

      来自 GitHub 页面:“RMPhoneFormat 提供了一个简单易用的类,用于格式化和验证 iOS 应用程序中的电话号码。格式应该复制您在联系人应用程序中看到的相同电话号码的内容。”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多