Chaîne de Format comme le royaume-UNI numéro de téléphone
Je suis à la recherche d'une routine qui permet de formater une chaîne de nombres comme un royaume-UNI numéro de téléphone. La routine de compte pour le royaume-UNI zone de codes qui nécessitent une mise en forme différente (c'est à dire de Londres par rapport à Edimbourg par rapport à Worcester) ainsi que les numéros de téléphone mobile.
Mes numéros de téléphone sont stockés dans la base de données comme des chaînes de caractères ne contenant que des caractères numériques.
Jusqu'à présent, je viens avec cela, mais la performance semble pauvres.
///<summary>
///Formats a string as a UK phone number
///</summary>
///<remarks>
///02012345678 becomes 020 1234 5678
///01311234567 becomes 0131 123 4567
///01905123456 becomes 01905 123456
///07816123456 becomes 07816 123456
///</remarks>
public static string FormatPhoneNumber(string phoneNumber)
{
string formattedPhoneNumber = null;
if (!string.IsNullOrEmpty(phoneNumber))
{
System.Text.RegularExpressions.Regex area1 = new System.Text.RegularExpressions.Regex(@"^0[1-9]0");
System.Text.RegularExpressions.Regex area2 = new System.Text.RegularExpressions.Regex(@"^01[1-9]1");
string formatString;
if (area1.Match(phoneNumber).Success)
{
formatString = "0{0:00 0000 0000}";
}
else if (area2.Match(phoneNumber).Success)
{
formatString = "0{0:000 000 0000}";
}
else
{
formatString = "0{0:0000 000000}";
}
formattedPhoneNumber = string.Format(formatString, Int64.Parse(phoneNumber));
}
return formattedPhoneNumber;
}
Pensées accueilli sur la façon d'améliorer cette...
Modifier
Mes premières pensées sont que je dois enregistrer des numéros de téléphone comme des champs numériques dans la base de données, alors je peux y aller sans le Int64.Analyser et savoir qu'ils sont véritablement numérique.
Edit 2
Les numéros de téléphone seront tous royaume-UNI géographique ou mobile au royaume-UNI nombres, de sorte que les cas spéciaux comme 0800 ne doivent pas être considérés comme des
OriginalL'auteur Richard Everett | 2009-01-23
Vous devez vous connecter pour publier un commentaire.
Royaume-UNI, les numéros de téléphone varient en longueur de 7 chiffres 10 chiffres, non compris le zéro. "zone", les codes peuvent varier entre 2 et généralement de 4 (mais de temps en temps 5) chiffres.
Tous les tableaux qui montrent la zone de code et la longueur totale de chaque numéro de préfixe sont disponibles à partir de OFCOM du site web. NB: Ces tableaux sont très long.
Aussi, il n'y a pas de norme pour exactement où les espaces sont mis. Certaines personnes pourraient les mettre dans la différence des lieux en fonction de la façon dont "lisible", il rend le texte qui en résulte.
Mentionné url ne fonctionne plus.
mise à jour maintenant
Il convient de noter que le mobile et certains numéros géographiques sont maintenant 11 chiffres.
droit - 10 ce n'est pas y compris le zéro
OriginalL'auteur Alnitak
** Je suis à la recherche d'une routine qui permet de formater une chaîne de nombres comme un royaume-UNI numéro de téléphone. **
Vous pouvez télécharger l'Ofcom base de données qui répertorie les formats pour chaque numéro de la gamme, y compris national de numérotation uniquement des nombres et d'effectuer une recherche pour chaque numéro, vous devez la formater. La base de données répertorie les SABCDE chiffres et le format: 0+10, 2+8, 3+7, 4+6, 4+5, 5+5, ou 5+4 pour chaque gamme.
Il y a un petit nombre d'erreurs dans la base de données (en particulier pour les 01697 et 0169 77 codes), mais ils sont moins de dix erreurs dans plus d'un quart de million d'entrées.
Il y a quatre dossiers couvrant les 01 et 02 nombres, et des fichiers séparés pour les différentes numéro non géographique des plages.
0+10 numéros sont Nationaux de Numérotation " et sont écrits sans les parenthèses autour de la zone de partie de code. Le code de la zone sera 02x pour tous 02 numéros, 0.1.xx pour tous 011x et 01x1 numéros, et 01xxx pour la plupart des autres 01 numéros (un très petit nombre - une douzaine - sera 0.1.xx xx).
Parenthèses entourent la zone de code sur tous les autres 01 et 02 nombres (qui est, utiliser des parenthèses sur 01 et 02 numéros où le numéro local partie ne pas commencer par un 0 ou un 1). Entre parenthèses montrent que les locaux de numérotation est possible au sein de la même zone, en omettant les chiffres délimitée par des parenthèses.
L'2+8 nomenclature montre l'indicatif régional et le numéro de la longueur, avec l'entrée 2075 : 2+8 sens du nombre est formaté comme (020) 75xx xxxx. Rappelez-vous le zéro n'est pas "compter" dans le 2+8 détermination.
** Royaume-UNI numéros de téléphone varient en longueur de 8 chiffres à 12 chiffres **
Pas. Depuis 2000, la plupart ont 10 chiffres après le " 0 " tronc code. Quelques-uns ont encore 9 chiffres après le " 0 " tronc code.
Il y a aussi quelques numéros spéciaux, tels que 0800 1111 et 0845 4647 à prendre en compte.
** "domaine" codes peuvent varier entre 2 et 4 chiffres. **
Zone codes peuvent varier entre 2 et 5 chiffres (le zéro n'est pas compté). Pour être clair, '020' est classé dans la catégorie 2-digit code de région, parce que le 0 est en fait le tronc code. Il y a aussi des 011x et 01x1 indicatifs de zone, et la plupart des numéros d'autres ont 01xxx zone codes. Celle-ci peut avoir les numéros de téléphone qui ne sont que 5 chiffres au lieu de la plus largement trouvé 6 chiffres des numéros locaux. Un très petit nombre ont une 0.1.xx xx code de la zone et ceux-ci ont 5 ou 4 chiffres, numéros locaux.
** En outre, il n'y a pas de norme pour exactement où les espaces sont mis. **
Il y a toujours un espace entre le code de la zone de la partie et le numéro de la partie pour toutes les 01 et 02 numéros.
Il est également d'usage (0.1.xx xx) indicatifs d'avoir un espace à l'intérieur de la zone de code comme indiqué. Cela représente les anciens locaux de groupements où ce système est encore en usage. D'autres (plus courte) de la zone de codes ne sont pas divisées.
Numéros locaux avec 7 ou 8 chiffres ont un split avant le quatrième chiffre de la fin. Numéros locaux avec 4, 5 ou 6 chiffres ne sont pas divisées. Cela s'applique géographiques et les numéros non-géographiques semblables.
Pour la plupart des 03, 08 et 09 numéros, le numéro est écrit comme 0xxx xxx xxxx.
Certains 0800 et tous les 0500 nombres sont écrits 0xxx xxxxxx.
Pour 055, 056, et 070 nombre le nombre est écrit 0xx xxxx xxxx.
Pour mobile et le récepteur de radiomessagerie, de l'utilisation 07xxx xxxxxx.
** à l'exception de certaines personnes utilisent '08000 abc def' au lieu de '0800 0abc def' **
Que l'utilisation est incorrecte. Soyez conscient que certains numéros 0800 9 chiffres après la 0 tronc de code, tandis que d'autres ont 10 chiffres après la 0 tronc code.
Donc, à la fois 0800 xxxxxx et 0800 xxx xxxx sont corrects.
0500 utiliser numéros seulement 0500 xxxxxx.
Plus 03, 08 et 09 nombres sont écrits comme 0xxx xxx xxxx.
Voir aussi:
http://en.wikipedia.org/wiki/Local_conventions_for_writing_telephone_numbers#United_Kingdom
OriginalL'auteur nrs
J'ai passé un peu de temps va par le biais de l'OFCOM feuilles et est venu avec ce qui suit.
OriginalL'auteur Alastair
Je serais tenté d'utiliser un resserrement ensemble de règles qui ne vérifiez l'ours minimum; Donc, dans l'hypothèse où le zéro est à la base de données, le pseudo-code serait:
NB. vos habitudes sont un peu mal 023 est un code à trois chiffres, et 0800 n'est pas
En effet, pourrait être ajouté comme un cas spécial. Devrait sans doute remarque que la réduction des numéros sont possibles dans le cas général.
OriginalL'auteur Rowland Shaw