web-dev-qa-db-ja.com

iOSでの文字列から電話番号への形式

私のアプリには、次のような文字列があります。

「3022513240」

私はこれを次のように変換したいと思います:

(302)-251-3240

どうすればこれを解決できますか?

13
user1673099

これは、文字列を10桁の番号の電話番号にフォーマットするSwift拡張子です。

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.に更新:

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

私はこのようにします:

例:

 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;

お役に立てれば...

11
lakesh

あなたは使用することができます 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]);
}
2
ishtar

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

2
Tung Tran

(\d{3})(\d{3})(\d{4})のような正規表現を使用して、パターンに一致する入力を($1)-$2-$3に置き換えることができます。

1
Naveed S

電話番号のフォーマットには RMPhoneFormat ライブラリを使用できます。書式設定は、同じ電話番号の連絡先アプリに表示される内容を複製する必要があります。

0
Edwin Vermeer

文字列を電話番号形式に変換するコードは次のとおりです

Swift

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)
0
Hardik Thakkar

これはシンプルで簡単です

-(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;
}
0
iSwaroop

ルックアップ RMPhoneFormat 、私はそれを使用しました。

0
Pascale Beaulac

SHSPhoneNumberFormatter を使用してこれを行ったので、タイプを変更したり、UITextFieldをサブクラス化したりする必要はありません。

設定するには:

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

UITextFieldTextDidChangeNotificationをリッスンし、以下を実行します。

let phoneDict = phoneNumberFormatter.valuesForString(phoneTextField.text) 
phoneTextField.text = phoneDict["text"] as? String
0
teradyl

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"
0
olearyj234