私のアプリには、次のような文字列があります。
「3022513240」
私はこれを次のように変換したいと思います:
(302)-251-3240
どうすればこれを解決できますか?
これは、文字列を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)
}
}
私はこのようにします:
例:
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;
お役に立てれば...
あなたは使用することができます 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
に置き換えることができます。
電話番号のフォーマットには RMPhoneFormat ライブラリを使用できます。書式設定は、同じ電話番号の連絡先アプリに表示される内容を複製する必要があります。
文字列を電話番号形式に変換するコードは次のとおりです
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)
これはシンプルで簡単です
-(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;
}
ルックアップ RMPhoneFormat 、私はそれを使用しました。
SHSPhoneNumberFormatter
を使用してこれを行ったので、タイプを変更したり、UITextField
をサブクラス化したりする必要はありません。
設定するには:
let phoneNumberFormatter = SHSPhoneNumberFormatter()
phoneNumberFormatter.setDefaultOutputPattern("(###) ###-####")
UITextFieldTextDidChangeNotification
をリッスンし、以下を実行します。
let phoneDict = phoneNumberFormatter.valuesForString(phoneTextField.text)
phoneTextField.text = phoneDict["text"] as? String
Swift 4.2
文字列にフォーマット文字または数字以外の文字が含まれている場合と含まれていない場合がある10桁および11桁の電話番号を処理します。
処理します:
結果:
コード:
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"