如何在C#中将手机号码转换为国际格式

时间:2015-05-25 09:13:15

标签: c# asp.net

我必须将手机号码转换为国际格式。

例如:如果用户输入以下格式的数字:

0274 123 4567(Newzeland)
09916123764(India)

转换应该发生

+642741234567 (Newzeland)
+919916123764 (India)

尝试了很多正则表达式,但只是这些正在验证,但是没有发生替换。

在Stack溢出中找到了一些类似的链接,但它在Python中。

Formatting a mobile number to international format

对于正常的移动验证,我使用的是以下代码。

protected bool IsValidPhone(string strPhoneInput)
{
    // Remove symbols (dash, space and parentheses, etc.)
    string strPhone = Regex.Replace(strPhoneInput, @"[- ()\*\!]", String.Empty);

    // Check for exactly 10 numbers left over
    Regex regTenDigits = new Regex(@"^([0|\+[0-9]{1,5})?([7-9][0-9]{9})$");
    Match matTenDigits = regTenDigits.Match(strPhone);

    return matTenDigits.Success;
}

任何机构都可以告诉我们如何将其转换为C#。

3 个答案:

答案 0 :(得分:6)

为了后人,这里是Google的LibPhoneNumber(official repository)的c#端口。该库提供了多种验证和格式化电话号码的方法。

https://www.nuget.org/packages/libphonenumber-csharp/

此库的示例。

string localPhoneNumber = "(555) 555-5555"
PhoneNumber pn = PhoneNumberUtil.Instance.Parse(localPhoneNumber, "US");
string internationalPhoneNumber = pn.Format(PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL);
//result +1-555-555-5555

答案 1 :(得分:1)

farlee2121的答案已过时。现在,在使用libphonenumber-csharp软件包时,您应该按照以下方式完成任务:

string phoneNumber = Console.ReadLine();
PhoneNumber pn = PhoneNumberUtil.GetInstance().Parse(phoneNumber, "US");
string internationalPhoneNumber = PhoneNumberUtil.GetInstance().Format(pn, PhoneNumberFormat.INTERNATIONAL);

答案 2 :(得分:-1)

感谢您的建议,我将与服务团队核实国家/地区代码。但只是为了存根创建我使用下面的代码是可管理的。

私有字符串IsMobileNumberValid(string mobileNumber)         {

        // remove all non-numeric characters
        string _mobileNumber = CleanNumber(mobileNumber);

        // trim any leading zeros
        _mobileNumber = _mobileNumber.TrimStart(new char[] { '0' });

        // check for this in case they've entered 44 (0)xxxxxxxxx or similar
        if (_mobileNumber.StartsWith("+640"))
        {
            _mobileNumber = _mobileNumber.Remove(2, 1);
        }

        // add country code if they haven't entered it
        //If we need to handle with multiple Country codes we have to place a list here,Currently added +64 as per document.
        if (!_mobileNumber.StartsWith("+64"))
        {
            _mobileNumber = "+64" + _mobileNumber;
        }

        // check if it's the right length
        if (_mobileNumber.Length != 12)
        {
            return _mobileNumber;
        }

        return _mobileNumber;
    }

    public string CleanNumber(string phone)
    {
        Regex digitsOnly = new Regex(@"[^\d]");
        return digitsOnly.Replace(phone, "");
    }