Formattting numéro de Téléphone dans l'Swift
Je suis formatage de mon textfiled texte lorsque l'utilisateur commence à taper le numéro de téléphone dans ce type de format 0 (555) 444 66 77
et il fonctionne très bien mais une fois que je reçois le numéro du serveur j'obtiens comme ça 05554446677
de Sorte s'il vous plaît pourriez-vous me dire comment je peux le modifier dans le même format une fois que je l'obtenir pour le serveur?
Mon code une fois que je commence à taper:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if textField == phoneNumberTextField{
var newString = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)
var components = newString.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)
var decimalString = "".join(components) as NSString
var length = decimalString.length
var hasLeadingOne = length > 0 && decimalString.characterAtIndex(0) == (1 as unichar)
if length == 0 || (length > 11 && !hasLeadingOne) || length > 12{
var newLength = (textField.text as NSString).length + (string as NSString).length - range.length as Int
return (newLength > 11) ? false : true
}
var index = 0 as Int
var formattedString = NSMutableString()
if hasLeadingOne{
formattedString.appendString("1 ")
index += 1
}
if (length - index) > 1{
var zeroNumber = decimalString.substringWithRange(NSMakeRange(index, 1))
formattedString.appendFormat("%@ ", zeroNumber)
index += 1
}
if (length - index) > 3{
var areaCode = decimalString.substringWithRange(NSMakeRange(index, 3))
formattedString.appendFormat("(%@) ", areaCode)
index += 3
}
if (length - index) > 3{
var prefix = decimalString.substringWithRange(NSMakeRange(index, 3))
formattedString.appendFormat("%@ ", prefix)
index += 3
}
if (length - index) > 3{
var prefix = decimalString.substringWithRange(NSMakeRange(index, 2))
formattedString.appendFormat("%@ ", prefix)
index += 2
}
var remainder = decimalString.substringFromIndex(index)
formattedString.appendString(remainder)
textField.text = formattedString as String
return false
}else{
return true
}
}
Les numéros de téléphone sont incroyablement complexes. Les hypothèses que vous pourriez avoir au sujet de leur format sont de nature purement locale, et sûrement avoir des tonnes d'exceptions et de cas limites. Utiliser une bibliothèque à la place, qui a codifié l'ensemble de ces exceptions à travailler à l'étranger. E. g.: github.com/marmelroy/PhoneNumberKit
OriginalL'auteur CAN | 2015-09-02
Vous devez vous connecter pour publier un commentaire.
Les Manipulations de caractères Chaîne de caractères ne sont pas très simples. Vous avez besoin d'suivantes:
Swift 2.1
Swift 2.0
Code d'impression
0 (555) 444 66 77
OriginalL'auteur Avt
Swift 3 & 4
Cette solution supprime tous les caractères non numériques avant d'appliquer la mise en forme. Il retourne
nil
si la source numéro de téléphone ne peut pas être formatée selon les hypothèses.Swift 4
La Swift 4 solution des comptes pour l'abandon du CharacterView et la Piqûre de devenir une collection de caractères que l'CharacterView est.
Swift 3
Exemple
Exemple De Sortie
OriginalL'auteur Mobile Dan
Swift 5
Mais il ne fonctionne pas si la chaîne de caractères compte plus ou moins de 11
Masqué nombre de taper
Appel de la fonction ci-dessus à partir de l'objet UITextField délégué méthode:
Donc, c'est mieux.
OriginalL'auteur Roman Filippov
Vraiment la solution la plus simple:
Utilisation:
meilleur modèle de solution
Comment puis-je l'utiliser pour les chiffres arabes?
Certainement mon préféré de la solution à cette question. Merci!!!!
init(encodedOffset:) " est obsolète: encodedOffset a été abandonnée depuis plus courantes d'utilisation est incorrecte.
OriginalL'auteur Дарія Прокопович
Vous pouvez utiliser cette bibliothèque https://github.com/luximetr/AnyFormatKit
Exemple
Il suffit de régler votre textField à ce textInputController et il sera en format texte avec le motif, que vous définissez.
OriginalL'auteur iOS Developer
Swift 3, mais devrait également être traduisible Swift 4
ErrorHandling
De Créer Des Motifs
Insérer Une Fonction
Utilisation
OriginalL'auteur Thomas Staltner
Swift 4
De créer cette fonction et d'appeler sur le champ de texte de l'événement de l'Édition Changé
OriginalL'auteur Chhaileng
Il y a un certain nombre de bonnes réponses ici, mais j'ai pris une approche complètement différente et j'ai pensé partager au cas où il permet.
Pour commencer j'ai rompu la mise en forme étapes et les composants dans leurs propres responsabilités distinctes.
Numéro de téléphone, le format peut généralement être divisé en local, national ou international types de formats qui varient en longueur de la chaîne.
J'ai défini les types:
Ensuite défini les séparateurs disponibles pour formater une chaîne du numéro de téléphone:
Ensuite, j'ai défini des règles de mise en forme que spécifier l'index (dans un numéro de téléphone string) où les séparateurs comme +,-,etc, sont insérés.
Avec ces définie, j'ai créé des règles qui associent les règles avec un certain type de format.
Avec tout défini de cette façon, vous pouvez configurer des règles rapidement pour convenir à n'importe quel format que vous avez besoin.
Voici un exemple d'un jeu de règles qui définit les 3 règles pour un trait d'union formaté chaîne du numéro de téléphone généralement utilisés dans les états-unis:
La (pas si) de soulever des poids lourds de la logique de mise en forme qui se passe ici:
J'ai créé un cadre avec un exemple de projet que vous pouvez regarder par ici: https://github.com/appteur/phoneformat
Ici est de savoir comment il fonctionne lorsque vous tapez:
J'ai aussi configurer de sorte que vous pouvez simplement importer avec cocoapods.
Puis l'utiliser:
OriginalL'auteur digitalHound
OriginalL'auteur Amr
C'est l'extension qui permettra de remplir pleinement vos besoins:
OriginalL'auteur Prabhat Kasera