iOS上的字符串到电话号码格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS上的字符串到电话号码格式相关的知识,希望对你有一定的参考价值。

在我的应用程序中,我有一个字符串,如:

"3022513240"

我想将其转换为:

(302)-251-3240

我怎么解决这个问题?

答案

我会这样做:

例:

 NSMutableString *stringts = [NSMutableString stringWithString:self.ts.text];
 [stringts insertString:@"(" atIndex:0];
 [stringts insertString:@")" atIndex:4];
 [stringts insertString:@"-" atIndex:5];
 [stringts insertString:@"-" atIndex:9];
 self.ts.text = stringts;

希望这可以帮助...

另一答案

这是将字符串转换为电话号码格式的代码

斯威夫特3

func PhoneNumberFormate( str : NSMutableString)->String{
        str.insert("(", at: 0)
        str.insert(")", at: 4)
        str.insert("-", at: 8)
        return str as String
    }

使用

let nsMutableString = NSMutableString(string: "3022513240")
let strModify = self.PhoneNumberFormate(str: nsMutableString)
另一答案

Swift 4.2

处理10和11位数的电话号码,这些电话号码可能已经或可能没有字符串中的格式或非数字字符。

会处理:

  • 1234567890, 12345678901, 123 456 7890, 123-456-7890, (123) 456-7890, 1-234-567-8901

结果:

  • (999)-999-9999
  • 1(999)-999-9999

码:

extension String {

    /// Handles 10 or 11 digit phone numbers
    ///
    /// - Returns: formatted phone number or original value
    public func toPhoneNumber() -> String {
        let digits = self.digitsOnly
        if digits.count == 10 {
            return digits.replacingOccurrences(of: "(d{3})(d{3})(d+)", with: "($1)-$2-$3", options: .regularExpression, range: nil)
        }
        else if digits.count == 11 {
            return digits.replacingOccurrences(of: "(d{1})(d{3})(d{3})(d+)", with: "$1($2)-$3-$4", options: .regularExpression, range: nil)
        }
        else {
            return self
        }
    }

}

extension StringProtocol {

    /// Returns the string with only [0-9], all other characters are filtered out
    var digitsOnly: String {
        return String(filter(("0"..."9").contains))
    }

}

例:

let num = "1234567890"
let formatted = num.toPhoneNumber()
// Formatted is "(123)-456-7890"
另一答案

这是一个Swift扩展,它将字符串格式化为10位数字的电话号码。

extension String {    
    public func toPhoneNumber() -> String {
        return stringByReplacingOccurrencesOfString("(d{3})(d{3})(d+)", withString: "($1) $2-$3", options: .RegularExpressionSearch, range: nil)
    }
}

例如:

let number = "1234567890"
let phone = number.toPhoneNumber()
print(phone)
// (123) 456-7890

更新到Swift 3.0:

extension String {
    public func toPhoneNumber() -> String {
        return self.replacingOccurrences(of: "(d{3})(d{3})(d+)", with: "($1) $2-$3", options: .regularExpression, range: nil)
    }
}
另一答案

你可以使用this方式

NSError *aError = nil;
NBPhoneNumber *myNumber1 = [phoneUtil parse:@"6766077303" defaultRegion:@"AT" error:&aError];
if (aError == nil)
{
    NSLog(@"isValidPhoneNumber ? [%@]", [phoneUtil isValidNumber:myNumber1] ? @"YES":@"NO");
    NSLog(@"E164          : %@", [phoneUtil format:myNumber1 numberFormat:NBEPhoneNumberFormatE164]);
    NSLog(@"INTERNATIONAL : %@", [phoneUtil format:myNumber1 numberFormat:NBEPhoneNumberFormatINTERNATIONAL]);
    NSLog(@"NATIONAL      : %@", [phoneUtil format:myNumber1 numberFormat:NBEPhoneNumberFormatNATIONAL]);
    NSLog(@"RFC3966       : %@", [phoneUtil format:myNumber1 numberFormat:NBEPhoneNumberFormatRFC3966]);
}
else
{
    NSLog(@"Error : %@", [aError localizedDescription]);
}
另一答案

您可以使用像(d{3})(d{3})(d{4})这样的正则表达式,并用($1)-$2-$3替换匹配模式的输入

另一答案

Swift 4.2

extension String {
public func toPhoneNumber() -> String {
    return self.replacingOccurrences(of: "(d{3})(d{3})(d+)", with: "$1-$2-$3", options: .regularExpression, range: nil)
}}

结果 Result

另一答案

这很简单

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
   if (string.length) {
       if (textField.text.length<=13) {
           if (textField.text.length==3) {
               NSString *tempStr=[NSString stringWithFormat:@"(%@)- ",textField.text];
               textField.text=tempStr;
           } else if (textField.text.length==8) {
               NSString *tempStr=[NSString stringWithFormat:@"%@-",textField.text];
               textField.text=tempStr;
           }
       } else {
           return NO;
       }
   }
   return YES;
}
另一答案

我使用SHSPhoneNumberFormatter来做这个,所以我不必改变我的UITextField的类型或子类

设置:

let phoneNumberFormatter = SHSPhoneNumberFormatter()
phoneNumberFormatter.setDefaultOutputPattern("(###) ###-####")

听取UITextFieldTextDidChangeNotification并运行以下内容:

let phoneDict = phoneNumberFormatter.valuesForString(phoneTextField.text) 
phoneTextField.text = phoneDict["text"] as? String
另一答案

查找RMPhoneFormat,我用它很棒。

另一答案

您可以使用RMPhoneFormat库来格式化电话号码。格式应该复制您在联系人应用程序中看到的相同电话号码的内容。

以上是关于iOS上的字符串到电话号码格式的主要内容,如果未能解决你的问题,请参考以下文章

为 Blogger 上的博客格式化代码片段 [关闭]

iOS上国家代码的电话号码格式

如何在 iOS 中为不同的区域代码实时格式化电话号码(使用 UITextfield 时)?

android小知识点代码片段

如何通过Phonegap查找具有iOS格式的联系人电话号码?

Android 格式化包含国家代码的国际电话号码字符串