C# 国际手机号类封装 – 使用nuget Global Phone 解析国际手机号

1. package-install globalphone

2. phone.cs聽

聽 聽

 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;        }    }

登录后复制

 以上就是C# 国际手机号类封装 – 使用nuget Global Phone 解析国际手机号的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2550433.html

(0)
上一篇 2025年3月6日 05:57:12
下一篇 2025年3月6日 05:57:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • C# 已知经纬度计算两点距离函数

    c# 已知经纬度计算两点距离函数 public Task GetDistance(double lat1, double lon1, double lat2, double lon2)        {            int R =…

    编程技术 2025年3月6日
    000
  • C# 解耦EntityFramework进行单元测试

    1. 首先ef的repository需要抽象的行为提到接口中。 例如 : public interface IXXXContext : IDisposable    {        IXXXContext NewInstance();//…

    编程技术 2025年3月6日
    200
  • C# 使用AD(Active Directory)验证内网用户名密码

    1. 连到内网,找到ad的domain地址nslookup set types=all_ldap._tcp2. 验证ad的函数 public bool ADLogin(string userName, string password)   …

    编程技术 2025年3月6日
    200
  • C# 一些获取硬件参数的方法

    c# 一些获取硬件参数的方法 private static string GetIdentifier(string wmiClass, string wmiProperty, string wmiMustBeTrue)        {  …

    编程技术 2025年3月6日
    200
  • C#中 特殊的string类型代码示例详解

    本文主要介绍了c# 特殊的string类型。具有很好的参考价值,下面跟着小编一起来看下吧 1.前言 string是属于引用类型的,这个大家都知道吧?但是平常在使用的过程中,发现它还是拥有一些值类型的特征的,这到底是为什么呢? 原因就是.Ne…

    编程技术 2025年3月6日
    200
  • C#中 线程同步代码详细介绍

    本文主要介绍了c#中线程同步的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧 前言 当线程池的线程阻塞时,线程池会创建额外的线程,而创建、销毁和调度线程所需要相当昂贵的内存资源,另外,很多的开发人员看见自己程序的线程没有做任何有用的…

    2025年3月6日
    200
  • C#单位转换器简单案例详解

    这篇文章主要为大家详细介绍了c#单位转换器简单案例,一个简单的winform应用程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 经过几天学习,写出了一个简单的winform应用程序,贴出源码,以备不时之需。 软件启动后的界面如下图所…

    2025年3月6日
    200
  • c#中@的3种作用的详细介绍

    本文主要介绍了c#中@的3种作用。具有很好的参考价值,下面跟着小编一起来看下吧 以前只知道@在C#中为了写文件路径的不要加转义符而在前面加上@标识符,没想到@还有其他的作用 1.忽略转义字符 例如 string fileName = “D:…

    编程技术 2025年3月6日
    200
  • C# 泛型的约束图文详细介绍

    本文将详细介绍c# 泛型的约束:引用类型约束;值类型约束;构造函数类型约束;转换类型约束;组合约束的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧 1.引用类型约束 struct RefSample where T:class   …

    2025年3月6日 编程技术
    200
  • c# 委托代码实例详解

    本文将通过实例解析对c# 委托进行详细介绍,具有很好的参考价值,下面跟着小编一起来看下吧 委托是一个类型。C#中的委托是面向对象的,并且它是类型安全的 当创建委托实例的时候,创建的实例会包含一个调用列表,在调用列表中可以包含多个方法。每个方…

    编程技术 2025年3月6日
    200

发表回复

登录后才能评论