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

Je ne sais rien à propos de royaume-UNI, numéros de téléphone, mais pour améliorer vos performances, de NE PAS compiler de nouvelles expressions régulières à chaque fois que la fonction est appelée. Utiliser un champ au niveau de la classe, si possible, et de définir RegexOptions.Compilé.

OriginalL'auteur Richard Everett | 2009-01-23