2013-02-20 10 views
12

W moim app, mam ciąg jak: "3022513240" &String do formatu numer telefonu iPhone SDK

chcę przekonwertować ten jak: (302) -251-3240

Jak można rozwiązuję to?

+4

możliwy duplikat [formatowanie numer telefonu] (http: // stackoverflow.com/questions/6052966/formatowanie numeru telefonu) – ColinE

+0

@ColinE: jest to formatowanie "w czasie rzeczywistym" podczas wprowadzania tekstu. OP pyta o formatowanie "gotowego" łańcucha. Mimo że odpowiedzi z połączonego pytania mogą z pewnością pomóc OP. –

+0

Zobacz [RMPhoneFormat] (https://github.com/rmaddy/RMPhoneFormat). – rmaddy

Odpowiedz

1

Można użyć wyrażenia regularnego jak (\d{3})(\d{3})(\d{4}) i wymienić wkład pasujący do wzorca ($1)-$2-$3

+1

Obsługuje tylko ograniczony zestaw numerów telefonów. – rmaddy

+0

Wystarczy na pytanie, myślę, że ... –

+0

@rmaddy OP stwierdził, że '3022513240' podobnie jak liczby muszą zostać przekonwertowane na format' (302) -251-3240'. W tym celu wystarczy podać wyrażenie regularne. Dlaczego tak długo pozostaje pytanie? –

0

Można użyć RMPhoneFormat bibliotekę dla numerów telefonów formatowanie. Formatowanie powinno powielić to, co zobaczysz w aplikacji Kontakty dla tego samego numeru telefonu.

+0

Edwin, zostanie to zaakceptowane w AppStore? Widzę, że używa jakiegoś prywatnego szkieletu. –

+0

Jeśli tak, to miałem szczęście, gdy ostatnio przesłałem swoją aplikację. Jeśli jesteś tego pewien, to czy mógłbyś utworzyć problem na tym githubie? Na jakim pliku/linii widzisz to? –

+0

Plik readme mówi, że. Skończyło się na tym, że korzystałem z biblioteki, którą wspomniałem w swojej odpowiedzi. –

12

chciałbym zrobić w ten sposób:

Przykład:

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; 

Nadzieja to pomaga ...

+0

Dzięki. Pomógł mi dużo. Zwłaszcza, gdy format US/Canada powinien działać tak samo w każdym miejscu. Rewizja. – NCFUSN

2

można użyć this sposób

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]); 
} 
+0

Używam tego, ale po raz pierwszy wpisz numer i po raz drugi tego samego połączenia, więc awarię aplikacji. –

0

Jest to proste i easy

-(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

Wyszukiwanie RMPhoneFormat, to świetnie, użyłem go.

+0

Używam tego również, ale sprawdzam, że nie pasuje on do formate używanego przez aplikację kontaktową i dla Indii (+91) pokazuje inny format, a także dla USA. Proszę, pomóżcie mi, chcę tylko wdrożyć tę samą funkcjonalność dla samej aplikacji kontaktowej. dzięki . Zamieszczam również pytanie, proszę odpowiedzieć tutaj lub na moje pytanie http://stackoverflow.com/questions/32390073/ios-native-phone-formater – user100

+0

https://github.com/tunabelly/RMPhoneFormat jako dodano obsługę ciągu znaków z 12 + cyfry. czy spróbowałeś tego widelca? Znam problem, który był otwarty dla indyjskiego formatu.Format USA powinien być dobry, użyłem go w Kanadzie/USA i było dobrze, gdy ostatnio go użyłem. ale od tego czasu upłynęło sporo czasu. Edycja: czy próbowałeś https://github.com/iziz/libPhoneNumber-iOS ta przeglądarka wygląda aktywnie Ostatnia aktualizacja była w zeszłym miesiącu. –

9

Oto rozszerzenie Swift, które formatuje ciągi znaków w numery telefonów na 10 cyfr.

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

Na przykład:

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

Aktualizacja do 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) 
    } 
} 
0

użyłem SHSPhoneNumberFormatter to zrobić, więc nie trzeba zmienić typ lub podklasy mój UITextField

Aby ustawić up:

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

Słuchaj za UITextFieldTextDidChangeNotification i uruchom następujące:

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

Oto kod, aby przekonwertować ciąg na numer telefonu formacie

Swift 3

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

używać

let nsMutableString = NSMutableString(string: "3022513240") 
let strModify = self.PhoneNumberFormate(str: nsMutableString) 
+0

Reguły dotyczące numerów telefonów różnią się w zależności od kraju. – Antzi

Powiązane problemy