Maison  >  Article  >  développement back-end  >  Encapsulation de classe de numéros de téléphone mobile internationaux C# - Utilisez nuget Global Phone pour analyser les numéros de téléphone mobile internationaux

Encapsulation de classe de numéros de téléphone mobile internationaux C# - Utilisez nuget Global Phone pour analyser les numéros de téléphone mobile internationaux

黄舟
黄舟original
2017-02-28 11:16:331644parcourir

1. Package-install GlobalPhone

2. Écoutez Phone.cs

Écoutez

 public class Phone
    {
        public string CountryCode { get; set; }
        public string InternationalNumber { get; set; }
        public string NationalNumber { get; set; }
        public string Territory { get; set; }
        public bool IsValid { get; set; }


        public Phone()
        {


        }


        private Phone(global::GlobalPhone.Number number)
            : this()
        {
            CountryCode = number.CountryCode;
            InternationalNumber = number.InternationalString;
            NationalNumber = number.NationalFormat;
            Territory = number.Territory.Name;
            IsValid = number.IsValid;
        }


        private static bool __libraryLoaded;
        private static global::GlobalPhone.Database __databse;
        private static void LoadStaticContent()
        {
            if (!__libraryLoaded)
            {
                try
                {
                    var assembly = Assembly.GetExecutingAssembly();
                    var dataStream = assembly.GetManifestResourceStream("Common.GlobalPhone.data.json");
                    if (dataStream != null)
                    {
                        var reader = new StreamReader(dataStream);
                        var text = reader.ReadToEnd();
                        global::GlobalPhone.GlobalPhone.DbText = text;


                        __databse = global::GlobalPhone.Database.Load(text);
                    }
                }
                catch (Exception ex)
                {
                    throw;
                }


                __libraryLoaded = true;
            }
        }




        private static readonly object __globalPhoneLock = new object();
        private static global::GlobalPhone.Region TrnaslateRegion(String countryCode)
        {
            if (string.IsNullOrEmpty(countryCode))
            {
                return null;
            }


            lock (__globalPhoneLock)
            {
                return __databse.TryGetRegion(countryCode);
            }
        }


        private static global::GlobalPhone.Territory TranslateTerritory(String territoryName)
        {
            if (string.IsNullOrEmpty(territoryName))
            {
                return null;
            }


            lock (__globalPhoneLock)
            {
                return __databse.TryGetTerritory(territoryName);
            }
        }


        public static Phone TryParseWithCountryCode(string number, string countryCode)
        {
            LoadStaticContent();


            var region = TrnaslateRegion(countryCode);
            if (region != null)
            {
                var territory = region.Territories.FirstOrDefault();
                if (territory != null)
                {
                    return TryParse(number, territory.Name);
                }
            }


            return null;
        }


        public static Phone TryParse(string number, string territoryName = null)
        {
            LoadStaticContent();


            if (string.IsNullOrEmpty(number))
            {
                return null;
            }




            var globalNumber = global::GlobalPhone.GlobalPhone.TryParse(number, territoryName);


            if (globalNumber != null && globalNumber.IsValid)
            {
                return new Phone(globalNumber);
            }


            //In scenario such as 6597531150 we need to help the library to understand that there is already the country code as a prefix
            var territory = TranslateTerritory(territoryName);
            if (territory != null)
            {
                //If the number start with same country code, we will try to add the plus and parse it again
                if (number.StartsWith(territory.CountryCode))
                {
                    globalNumber = global::GlobalPhone.GlobalPhone.TryParse(string.Format("+{0}", number), territoryName);
                    if (globalNumber != null && globalNumber.IsValid)
                    {
                        return new Phone(globalNumber);
                    }
                }


            }


            return null;
        }


    }

Ce qui précède est le C# international. Encapsulation de classe de numéro de téléphone mobile - utilisez nuget Global Phone pour analyser le contenu des numéros de téléphone mobile internationaux. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn