private static string GetPhoneNumber(this string mobile, string region, PhoneNumberFormat format, params PhoneNumberType[] phoneTypesToCheck)
        {
            if (string.IsNullOrEmpty(region))
            {
                throw new ArgumentNullException(region);
            }

            var phoneUtil = PhoneNumberUtil.GetInstance();

            if (String.IsNullOrWhiteSpace(mobile))
            {
                return(mobile);
            }

            var phoneNumber = mobile.ExtractPhoneNumber(region);

            if (phoneNumber == null)
            {
                return(null);
            }

            var phoneType = phoneUtil.GetNumberType(phoneNumber);

            if (phoneTypesToCheck != null && phoneTypesToCheck.Length > 0 && phoneTypesToCheck.Contains(phoneType))
            {
                return(phoneNumber.FormatPhoneNumber(format));
            }

            return(null);
        }
Example #2
0
        private static string Format(string mobile, PhoneNumberFormat fmt, bool throwException = false)
        {
            PhoneNumber number = Parse(mobile, throwException: throwException);

            return(number != null
                ? PhoneNumberUtil.GetInstance().Format(number, fmt)
                : null /* 目前認為傳回null,正好可以表示這個輸入的號碼不合法 */);
        }
        /// <summary>
        /// convert phone number object to string with given format
        /// </summary>
        /// <param name="phone"></param>
        /// <param name="format"></param>
        /// <returns></returns>
        public static string FormatPhoneNumber(this PhoneNumber phone, PhoneNumberFormat format)
        {
            if (phone == null)
            {
                return(null);
            }

            var util = PhoneNumberUtil.GetInstance();

            return(util.Format(phone, format).RemoveSpaces());
        }
Example #4
0
 public static string AsPhone(this string s, PhoneNumberFormat format)
 {
     try
     {
         var phoneService = PhoneNumberUtil.GetInstance();
         return(phoneService.Format(phoneService.Parse(s, "RU"), format));
     }
     catch {
         return(s);
     }
 }
Example #5
0
        /// <summary>
        /// Строковое представление номера
        /// </summary>
        /// <param name="numberFormat">Формат строкового представления номера</param>
        public string ToString(PhoneNumberFormat numberFormat)
        {
            StringBuilder sb = new StringBuilder();

            switch (numberFormat)
            {
            case PhoneNumberFormat.ReadableInternational:
                sb.Append('+');
                sb.Append(_countryCode);
                BuildPhoneNo(sb, true);
                break;

            case PhoneNumberFormat.ReadableRussian:
                sb.Append(_longDistancePrefix);
                sb.Append('-');
                if (string.Compare(_countryCode, _russianCountryCode) != 0)
                {
                    sb.Append(_internationalPrefix);
                    sb.Append('-');
                    sb.Append(_countryCode);
                }
                BuildPhoneNo(sb, true);
                break;

            case PhoneNumberFormat.ReadableNumberOnly:
                BuildPhoneNo(sb, false);
                break;

            case PhoneNumberFormat.NonReadable:
                sb.Append(_countryCode);
                sb.Append(_areaCode);
                foreach (string s in _phoneNo)
                {
                    sb.Append(s);
                }
                break;

            default:
                ConvertToSMS(sb);
                break;
            }
            return(sb.ToString());
        }
        public static string FormatAsPhoneNumber(
            this string value,
            PhoneNumberFormat format = PhoneNumberFormat.ParenthesisAndDashes)
        {
            // TODO: Expand to include non-NorthAmerican phone numbers.

            // Convert to numbers only
            var raw = value.ToRawPhoneNumber();

            if (raw.Length >= 10)
            {
                var template = "({0}) {1}-{2}";
                if (format == PhoneNumberFormat.DashesOnly)
                {
                    template = "{0}-{1}-{2}";
                }
                else if (format == PhoneNumberFormat.PeriodsOnly)
                {
                    template = "{0}.{1}.{2}";
                }

                var phoneNumber = string.Format(template,
                                                raw.Substring(0, 3),
                                                raw.Substring(3, 3),
                                                raw.Substring(6, 4));

                // Treat the remainder as the extension.
                if (raw.Length > 10)
                {
                    return(string.Format("{0} x{1}", phoneNumber, raw.Substring(10, raw.Length - 10)));
                }
                else
                {
                    return(phoneNumber);
                }
            }
            else
            {
                return(raw);
            }
        }
Example #7
0
        public string ToString(PhoneNumberFormat format)
        {
            var phoneNumber = new StringBuilder();

            if (format.HasFlag(PhoneNumberFormat.PlusSign))
                phoneNumber.AppendFormat("+{0}", _countryCode);
            else
                phoneNumber.Append(_countryCode);

            if (format.HasFlag(PhoneNumberFormat.Spaces))
                phoneNumber.Append(" ");

            if (format.HasFlag(PhoneNumberFormat.Braces))
                phoneNumber.AppendFormat("({0})", _carrierCode);
            else
                phoneNumber.Append(_carrierCode);

            if (format.HasFlag(PhoneNumberFormat.Spaces))
                phoneNumber.Append(" ");

            phoneNumber.Append(_abonentNumber);

            return phoneNumber.ToString();
        }
 // Simple wrapper of formatNsn for the common case of no carrier code.
 private String FormatNsn(String number, PhoneMetadata metadata, PhoneNumberFormat numberFormat)
 {
     return FormatNsn(number, metadata, numberFormat, null);
 }
 // Simple wrapper of formatNsnUsingPattern for the common case of no carrier code.
 internal String FormatNsnUsingPattern(String nationalNumber,
     NumberFormat formattingPattern, PhoneNumberFormat numberFormat)
 {
     return FormatNsnUsingPattern(nationalNumber, formattingPattern, numberFormat, null);
 }
 /// <summary>
 /// format phone number string to given format
 /// </summary>
 /// <param name="mobile"></param>
 /// <param name="region"></param>
 /// <param name="format"></param>
 /// <param name="phoneTypesToCheck"></param>
 /// <returns></returns>
 public static string FormatNumber(this string mobile, string region, PhoneNumberFormat format, params PhoneNumberType[] phoneTypesToCheck)
 {
     return(GetPhoneNumber(mobile, region, format, phoneTypesToCheck));
 }
 // Simple wrapper of formatAccordingToFormats for the common case of no carrier code.
 private String FormatAccordingToFormats(String nationalNumber,
     List<NumberFormat> availableFormats, PhoneNumberFormat numberFormat)
 {
     return FormatAccordingToFormats(nationalNumber, availableFormats, numberFormat, null);
 }
        /**
        * Formats a phone number in the specified format using client-defined formatting rules. Note that
        * if the phone number has a country calling code of zero or an otherwise invalid country calling
        * code, we cannot work out things like whether there should be a national prefix applied, or how
        * to format extensions, so we return the national significant number with no formatting applied.
        *
        * @param number                        the phone number to be formatted
        * @param numberFormat                  the format the phone number should be formatted into
        * @param userDefinedFormats            formatting rules specified by clients
        * @return  the formatted phone number
        */
        public String FormatByPattern(PhoneNumber number, PhoneNumberFormat numberFormat,
            List<NumberFormat> userDefinedFormats)
        {
            int countryCallingCode = number.CountryCode;
            var nationalSignificantNumber = GetNationalSignificantNumber(number);
            // Note getRegionCodeForCountryCode() is used because formatting information for regions which
            // share a country calling code is contained by only one region for performance reasons. For
            // example, for NANPA regions it will be contained in the metadata for US.
            var regionCode = GetRegionCodeForCountryCode(countryCallingCode);
            if (!HasValidCountryCallingCode(countryCallingCode))
                return nationalSignificantNumber;

            PhoneMetadata metadata = GetMetadataForRegionOrCallingCode(countryCallingCode, regionCode);
            StringBuilder formattedNumber = new StringBuilder(20);
            NumberFormat formattingPattern =
                ChooseFormattingPatternForNumber(userDefinedFormats, nationalSignificantNumber);
            if (formattingPattern == null)
            {
                // If no pattern above is matched, we format the number as a whole.
                formattedNumber.Append(nationalSignificantNumber);
            }
            else
            {
                var numFormatCopy = new NumberFormat.Builder();
                // Before we do a replacement of the national prefix pattern $NP with the national prefix, we
                // need to copy the rule so that subsequent replacements for different numbers have the
                // appropriate national prefix.
                numFormatCopy.MergeFrom(formattingPattern);
                String nationalPrefixFormattingRule = formattingPattern.NationalPrefixFormattingRule;
                if (nationalPrefixFormattingRule.Length > 0)
                {
                    String nationalPrefix = metadata.NationalPrefix;
                    if (nationalPrefix.Length > 0)
                    {
                        // Replace $NP with national prefix and $FG with the first group ($1).
                        nationalPrefixFormattingRule = NP_PATTERN.Replace(nationalPrefixFormattingRule, nationalPrefix, 1);
                        nationalPrefixFormattingRule = FG_PATTERN.Replace(nationalPrefixFormattingRule, "$$1", 1);
                        numFormatCopy.SetNationalPrefixFormattingRule(nationalPrefixFormattingRule);
                    }
                    else
                    {
                        // We don't want to have a rule for how to format the national prefix if there isn't one.
                        numFormatCopy.ClearNationalPrefixFormattingRule();
                    }
                }
                formattedNumber.Append(
                    FormatNsnUsingPattern(nationalSignificantNumber, numFormatCopy.Build(), numberFormat));
            }
            MaybeAppendFormattedExtension(number, metadata, numberFormat, formattedNumber);
            PrefixNumberWithCountryCallingCode(countryCallingCode, numberFormat, formattedNumber);
            return formattedNumber.ToString();
        }
 /**
 * Formats a phone number in the specified format using default rules. Note that this does not
 * promise to produce a phone number that the user can dial from where they are - although we do
 * format in either 'national' or 'international' format depending on what the client asks for, we
 * do not currently support a more abbreviated format, such as for users in the same "area" who
 * could potentially dial the number without area code. Note that if the phone number has a
 * country calling code of 0 or an otherwise invalid country calling code, we cannot work out
 * which formatting rules to apply so we return the national significant number with no formatting
 * applied.
 *
 * @param number         the phone number to be formatted
 * @param numberFormat   the format the phone number should be formatted into
 * @return  the formatted phone number
 */
 public String Format(PhoneNumber number, PhoneNumberFormat numberFormat)
 {
     if (number.NationalNumber == 0 && number.HasRawInput)
     {
         String rawInput = number.RawInput;
         if (rawInput.Length > 0)
         {
             return rawInput;
         }
     }
     var formattedNumber = new StringBuilder(20);
     Format(number, numberFormat, formattedNumber);
     return formattedNumber.ToString();
 }
 /**
 * Appends the formatted extension of a phone number to formattedNumber, if the phone number had
 * an extension specified.
 */
 private void MaybeAppendFormattedExtension(PhoneNumber number, PhoneMetadata metadata,
     PhoneNumberFormat numberFormat, StringBuilder formattedNumber)
 {
     if (number.HasExtension && number.Extension.Length > 0)
     {
         if (numberFormat == PhoneNumberFormat.RFC3966)
         {
             formattedNumber.Append(RFC3966_EXTN_PREFIX).Append(number.Extension);
         }
         else
         {
             if (metadata.HasPreferredExtnPrefix)
                 formattedNumber.Append(metadata.PreferredExtnPrefix).Append(number.Extension);
             else
                 formattedNumber.Append(DEFAULT_EXTN_PREFIX).Append(number.Extension);
         }
     }
 }
        /**
        * Formats a phone number in the specified format using client-defined formatting rules. Note that
        * if the phone number has a country calling code of zero or an otherwise invalid country calling
        * code, we cannot work out things like whether there should be a national prefix applied, or how
        * to format extensions, so we return the national significant number with no formatting applied.
        *
        * @param number                        the phone number to be formatted
        * @param numberFormat                  the format the phone number should be formatted into
        * @param userDefinedFormats            formatting rules specified by clients
        * @return  the formatted phone number
        */
        public String FormatByPattern(PhoneNumber number, PhoneNumberFormat numberFormat,
            List<NumberFormat> userDefinedFormats)
        {
            int countryCallingCode = number.CountryCode;
            var nationalSignificantNumber = GetNationalSignificantNumber(number);
            // Note getRegionCodeForCountryCode() is used because formatting information for regions which
            // share a country calling code is contained by only one region for performance reasons. For
            // example, for NANPA regions it will be contained in the metadata for US.
            var regionCode = GetRegionCodeForCountryCode(countryCallingCode);
            if (!HasValidRegionCode(regionCode, countryCallingCode, nationalSignificantNumber))
                return nationalSignificantNumber;

            var userDefinedFormatsCopy = new List<NumberFormat>(userDefinedFormats.Count);
            foreach (var numFormat in userDefinedFormats)
            {
                var nationalPrefixFormattingRule = numFormat.NationalPrefixFormattingRule;
                if (nationalPrefixFormattingRule.Length > 0)
                {
                    // Before we do a replacement of the national prefix pattern $NP with the national prefix,
                    // we need to copy the rule so that subsequent replacements for different numbers have the
                    // appropriate national prefix.
                    var numFormatCopy = new NumberFormat.Builder();
                    numFormatCopy.MergeFrom(numFormat);
                    var nationalPrefix = GetMetadataForRegion(regionCode).NationalPrefix;
                    if (nationalPrefix.Length > 0)
                    {
                        // Replace $NP with national prefix and $FG with the first group ($1).
                        nationalPrefixFormattingRule = NP_PATTERN.Replace(nationalPrefixFormattingRule, nationalPrefix, 1);
                        nationalPrefixFormattingRule = FG_PATTERN.Replace(nationalPrefixFormattingRule, "$$1", 1);
                        numFormatCopy.SetNationalPrefixFormattingRule(nationalPrefixFormattingRule);
                    }
                    else
                    {
                        // We don't want to have a rule for how to format the national prefix if there isn't one.
                        numFormatCopy.ClearNationalPrefixFormattingRule();
                    }
                    userDefinedFormatsCopy.Add(numFormatCopy.Build());
                }
                else
                {
                    // Otherwise, we just add the original rule to the modified list of formats.
                    userDefinedFormatsCopy.Add(numFormat);
                }
            }

            var formattedNumber = new StringBuilder(FormatAccordingToFormats(nationalSignificantNumber,
                userDefinedFormatsCopy, numberFormat));
            MaybeGetFormattedExtension(number, regionCode, numberFormat, formattedNumber);
            FormatNumberByFormat(countryCallingCode, numberFormat, formattedNumber);
            return formattedNumber.ToString();
        }
 /**
 * A helper function that is used by format and formatByPattern.
 */
 private void FormatNumberByFormat(int countryCallingCode,
     PhoneNumberFormat numberFormat, StringBuilder formattedNumber)
 {
     switch (numberFormat)
     {
         case PhoneNumberFormat.E164:
             formattedNumber.Insert(0, countryCallingCode.ToString(CultureInfo.InvariantCulture)).Insert(0, PLUS_SIGN.ToString(CultureInfo.InvariantCulture));
             return;
         case PhoneNumberFormat.INTERNATIONAL:
             formattedNumber.Insert(0, " ").Insert(0, countryCallingCode.ToString(CultureInfo.InvariantCulture)).Insert(0, PLUS_SIGN.ToString(CultureInfo.InvariantCulture));
             return;
         case PhoneNumberFormat.RFC3966:
             formattedNumber.Insert(0, "-").Insert(0, countryCallingCode.ToString(CultureInfo.InvariantCulture)).Insert(0, PLUS_SIGN.ToString(CultureInfo.InvariantCulture));
             return;
         case PhoneNumberFormat.NATIONAL:
         default:
             return;
     }
 }
 /**
 * Appends the formatted extension of a phone number to formattedNumber, if the phone number had
 * an extension specified.
 */
 private void MaybeGetFormattedExtension(PhoneNumber number, String regionCode,
     PhoneNumberFormat numberFormat, StringBuilder formattedNumber)
 {
     if (number.HasExtension && number.Extension.Length > 0)
     {
         if (numberFormat == PhoneNumberFormat.RFC3966)
         {
             formattedNumber.Append(RFC3966_EXTN_PREFIX).Append(number.Extension);
         }
         else
         {
             FormatExtension(number.Extension, regionCode, formattedNumber);
         }
     }
 }
 // Note in some regions, the national number can be written in two completely different ways
 // depending on whether it forms part of the NATIONAL format or INTERNATIONAL format. The
 // numberFormat parameter here is used to specify which format to use for those cases. If a
 // carrierCode is specified, this will be inserted into the formatted string to replace $CC.
 private String FormatNationalNumber(String number, String regionCode, PhoneNumberFormat numberFormat,
     String carrierCode)
 {
     var metadata = GetMetadataForRegion(regionCode);
     var intlNumberFormats = metadata.IntlNumberFormatList;
     // When the intlNumberFormats exists, we use that to format national number for the
     // INTERNATIONAL format instead of using the numberDesc.numberFormats.
     var availableFormats =
         (intlNumberFormats.Count == 0 || numberFormat == PhoneNumberFormat.NATIONAL)
         ? metadata.NumberFormatList
         : metadata.IntlNumberFormatList;
     var formattedNationalNumber =
         FormatAccordingToFormats(number, availableFormats, numberFormat, carrierCode);
     if (numberFormat == PhoneNumberFormat.RFC3966)
         formattedNationalNumber = SEPARATOR_PATTERN.Replace(formattedNationalNumber, "-");
     return formattedNationalNumber;
 }
 // Simple wrapper of formatNationalNumber for the common case of no carrier code.
 private String FormatNationalNumber(String number, String regionCode,
     PhoneNumberFormat numberFormat)
 {
     return FormatNationalNumber(number, regionCode, numberFormat, null);
 }
 // Note that carrierCode is optional - if NULL or an empty string, no carrier code replacement
 // will take place.
 private String FormatAccordingToFormats(String nationalNumber, IList<NumberFormat> availableFormats,
     PhoneNumberFormat numberFormat, String carrierCode)
 {
     NumberFormat numFormat = ChooseFormattingPatternForNumber(availableFormats, nationalNumber);
     if (numFormat == null)
     {
         // If no pattern above is matched, we format the number as a whole.
         return nationalNumber;
     }
     var matcher = regexCache.GetPatternForRegex(numFormat.Pattern);
     var numberFormatRule = numFormat.Format;
     if (numberFormat == PhoneNumberFormat.NATIONAL &&
         carrierCode != null && carrierCode.Length > 0 &&
         numFormat.DomesticCarrierCodeFormattingRule.Length > 0)
     {
         // Replace the $CC in the formatting rule with the desired carrier code.
         var carrierCodeFormattingRule = numFormat.DomesticCarrierCodeFormattingRule;
         carrierCodeFormattingRule =
             CC_PATTERN.Replace(carrierCodeFormattingRule, carrierCode, 1);
         // Now replace the $FG in the formatting rule with the first group and the carrier code
         // combined in the appropriate way.
         numberFormatRule = FIRST_GROUP_PATTERN.Replace(numberFormatRule, carrierCodeFormattingRule, 1);
         return matcher.Replace(nationalNumber, numberFormatRule);
     }
     else
     {
         // Use the national prefix formatting rule instead.
         var nationalPrefixFormattingRule = numFormat.NationalPrefixFormattingRule;
         if (numberFormat == PhoneNumberFormat.NATIONAL &&
             nationalPrefixFormattingRule != null &&
             nationalPrefixFormattingRule.Length > 0)
         {
             numberFormatRule = FIRST_GROUP_PATTERN.Replace(numberFormatRule,
                 nationalPrefixFormattingRule, 1);
             return matcher.Replace(nationalNumber, numberFormatRule);
         }
         else
         {
             return matcher.Replace(nationalNumber, numberFormatRule);
         }
     }
 }
 // Note in some regions, the national number can be written in two completely different ways
 // depending on whether it forms part of the NATIONAL format or INTERNATIONAL format. The
 // numberFormat parameter here is used to specify which format to use for those cases. If a
 // carrierCode is specified, this will be inserted into the formatted string to replace $CC.
 private String FormatNsn(String number,
     PhoneMetadata metadata,
     PhoneNumberFormat numberFormat,
     String carrierCode)
 {
     var intlNumberFormats = metadata.IntlNumberFormatList;
     // When the intlNumberFormats exists, we use that to format national number for the
     // INTERNATIONAL format instead of using the numberDesc.numberFormats.
     var availableFormats =
         (intlNumberFormats.Count == 0 || numberFormat == PhoneNumberFormat.NATIONAL)
         ? metadata.NumberFormatList
         : metadata.IntlNumberFormatList;
     NumberFormat formattingPattern = ChooseFormattingPatternForNumber(availableFormats, number);
     return (formattingPattern == null)
         ? number
         : FormatNsnUsingPattern(number, formattingPattern, numberFormat, carrierCode);
 }
Example #22
0
            public static string Format(string mobile, PhoneNumberFormat fmt)
            {
                PhoneNumber number = Parse(mobile);

                return(number != null?PhoneNumberUtil.GetInstance().Format(number, fmt) : null /* 目前認為傳回null,正好可以表示這個輸入的號碼不合法 */);
            }
 // Note that carrierCode is optional - if NULL or an empty string, no carrier code replacement
 // will take place.
 private String FormatNsnUsingPattern(String nationalNumber, NumberFormat formattingPattern,
     PhoneNumberFormat numberFormat, String carrierCode)
 {
     String numberFormatRule = formattingPattern.Format;
     var m = regexCache.GetPatternForRegex(formattingPattern.Pattern);
     String formattedNationalNumber = "";
     if (numberFormat == PhoneNumberFormat.NATIONAL &&
         carrierCode != null && carrierCode.Length > 0 &&
         formattingPattern.DomesticCarrierCodeFormattingRule.Length > 0)
     {
         // Replace the $CC in the formatting rule with the desired carrier code.
         var carrierCodeFormattingRule = formattingPattern.DomesticCarrierCodeFormattingRule;
         carrierCodeFormattingRule =
             CC_PATTERN.Replace(carrierCodeFormattingRule, carrierCode, 1);
         // Now replace the $FG in the formatting rule with the first group and the carrier code
         // combined in the appropriate way.
         var r = FIRST_GROUP_PATTERN.Replace(numberFormatRule, carrierCodeFormattingRule, 1);
         formattedNationalNumber = m.Replace(nationalNumber, r);
     }
     else
     {
         // Use the national prefix formatting rule instead.
         var nationalPrefixFormattingRule = formattingPattern.NationalPrefixFormattingRule;
         if (numberFormat == PhoneNumberFormat.NATIONAL &&
             nationalPrefixFormattingRule != null &&
             nationalPrefixFormattingRule.Length > 0)
         {
             var r = FIRST_GROUP_PATTERN.Replace(numberFormatRule,
                 nationalPrefixFormattingRule, 1);
             formattedNationalNumber = m.Replace(nationalNumber, r);
         }
         else
         {
             formattedNationalNumber = m.Replace(nationalNumber, numberFormatRule);
         }
     }
     if (numberFormat == PhoneNumberFormat.RFC3966)
     {
         // Strip any leading punctuation.
         if (SEPARATOR_PATTERN.MatchBeginning(formattedNationalNumber).Success)
         {
             formattedNationalNumber = SEPARATOR_PATTERN.Replace(formattedNationalNumber, "", 1);
         }
         // Replace the rest with a dash between each number group.
         formattedNationalNumber = SEPARATOR_PATTERN.Replace(formattedNationalNumber, "-");
     }
     return formattedNationalNumber;
 }
Example #24
0
        public string ToString(PhoneNumberFormat format)
        {
            // TODO: implement and use IPhoneNumberFormatter
            var formattedString = string.IsNullOrEmpty(CountryCode) ? string.Empty : "+";

            switch (format)
            {
            case PhoneNumberFormat.Default:
                if (string.IsNullOrEmpty(Number) && string.IsNullOrEmpty(Extension))
                {
                    return(string.Empty);
                }
                formattedString += CountryCode + AreaCode + Number + Extension;
                break;

            case PhoneNumberFormat.DIN_5008:
                formattedString += CountryCode;
                if (!string.IsNullOrEmpty(CountryCode) && !string.IsNullOrEmpty(AreaCode))
                {
                    formattedString += " ";
                }
                formattedString += AreaCode;
                if (!string.IsNullOrEmpty(AreaCode) && !string.IsNullOrEmpty(Number))
                {
                    formattedString += " ";
                }
                formattedString += Number + "-" + Extension;
                break;

            case PhoneNumberFormat.E_123:
                formattedString += CountryCode;
                if (!string.IsNullOrEmpty(CountryCode) && !string.IsNullOrEmpty(AreaCode))
                {
                    formattedString += " ";
                }
                formattedString += AreaCode;
                if (!string.IsNullOrEmpty(AreaCode) && !string.IsNullOrEmpty(Number))
                {
                    formattedString += " ";
                }
                formattedString += Number + Extension;
                break;

            case PhoneNumberFormat.Microsoft:
                formattedString += CountryCode;
                if (!string.IsNullOrEmpty(CountryCode) && !string.IsNullOrEmpty(AreaCode))
                {
                    formattedString += " ";
                }
                if (!string.IsNullOrEmpty(AreaCode))
                {
                    formattedString += "(" + AreaCode + ")";
                }
                if (!string.IsNullOrEmpty(AreaCode) && !string.IsNullOrEmpty(Number))
                {
                    formattedString += " ";
                }
                formattedString += Number + Extension;
                break;

            case PhoneNumberFormat.URI:
                formattedString += CountryCode;
                if (!string.IsNullOrEmpty(CountryCode) && !string.IsNullOrEmpty(AreaCode))
                {
                    formattedString += "-";
                }
                formattedString += AreaCode;
                if (!string.IsNullOrEmpty(AreaCode) && !string.IsNullOrEmpty(Number))
                {
                    formattedString += "-";
                }
                formattedString += Number + Extension;
                break;

            default:
                Debug.Print("Invalid PhoneNumberFormat");
                break;
            }

            return(formattedString);
        }
 /**
 * A helper function that is used by format and formatByPattern.
 */
 private void PrefixNumberWithCountryCallingCode(int countryCallingCode,
     PhoneNumberFormat numberFormat, StringBuilder formattedNumber)
 {
     switch (numberFormat)
     {
         case PhoneNumberFormat.E164:
             formattedNumber.Insert(0, countryCallingCode).Insert(0, PLUS_SIGN);
             return;
         case PhoneNumberFormat.INTERNATIONAL:
             formattedNumber.Insert(0, " ").Insert(0, countryCallingCode).Insert(0, PLUS_SIGN);
             return;
         case PhoneNumberFormat.RFC3966:
             formattedNumber.Insert(0, "-").Insert(0, countryCallingCode).Insert(0, PLUS_SIGN)
                  .Insert(0, RFC3966_PREFIX);
             return;
         case PhoneNumberFormat.NATIONAL:
         default:
             return;
     }
 }
        public static HtmlString DisplayForPhone(this IHtmlHelper helper, string phone, PhoneNumberFormat format)
        {
            if (phone == null)
            {
                return(new HtmlString(string.Empty));
            }

            string formatted = phone.AsPhone(format);
            string s         = $"<a href='tel:{phone}'>{formatted}</a>";

            return(new HtmlString(s));
        }
        /**
        * Same as {@link #format(PhoneNumber, PhoneNumberFormat)}, but accepts a mutable StringBuilder as
        * a parameter to decrease object creation when invoked many times.
        */
        public void Format(PhoneNumber number, PhoneNumberFormat numberFormat,
            StringBuilder formattedNumber)
        {
            // Clear the StringBuilder first.
            formattedNumber.Length = 0;
            var countryCallingCode = number.CountryCode;
            var nationalSignificantNumber = GetNationalSignificantNumber(number);
            if (numberFormat == PhoneNumberFormat.E164)
            {
                // Early exit for E164 case since no formatting of the national number needs to be applied.
                // Extensions are not formatted.
                formattedNumber.Append(nationalSignificantNumber);
                PrefixNumberWithCountryCallingCode(countryCallingCode, PhoneNumberFormat.E164,
                    formattedNumber);
                return;
            }
            // Note getRegionCodeForCountryCode() is used because formatting information for regions which
            // share a country calling code is contained by only one region for performance reasons. For
            // example, for NANPA regions it will be contained in the metadata for US.
            var regionCode = GetRegionCodeForCountryCode(countryCallingCode);
            if (!HasValidCountryCallingCode(countryCallingCode))
            {
                formattedNumber.Append(nationalSignificantNumber);
                return;
            }

            PhoneMetadata metadata = GetMetadataForRegionOrCallingCode(countryCallingCode, regionCode);
            formattedNumber.Append(FormatNsn(nationalSignificantNumber, metadata, numberFormat));
            MaybeAppendFormattedExtension(number, metadata, numberFormat, formattedNumber);
            PrefixNumberWithCountryCallingCode(countryCallingCode, numberFormat, formattedNumber);
        }
Example #28
0
 /// <summary>
 /// Строковое представление номера
 /// </summary>
 /// <param name="numberFormat">Формат строкового представления номера</param>
 public String ToString(PhoneNumberFormat numberFormat)
 {
     StringBuilder sb = new StringBuilder();
     switch (numberFormat)
     {
         case PhoneNumberFormat.ReadableInternational:
             sb.Append('+');
             sb.Append(_countryCode);
             BuildPhoneNo(sb, true);
             break;
         case PhoneNumberFormat.ReadableRussian:
             sb.Append(_longDistancePrefix);
             sb.Append('-');
             if (String.Compare(_countryCode, _russianCountryCode) != 0)
             {
                 sb.Append(_internationalPrefix);
                 sb.Append('-');
                 sb.Append(_countryCode);
             }
             BuildPhoneNo(sb, true);
             break;
         case PhoneNumberFormat.ReadableNumberOnly:
             BuildPhoneNo(sb, false);
             break;
         case PhoneNumberFormat.NonReadable:
             sb.Append(_countryCode);
             sb.Append(_areaCode);
             foreach (String s in _phoneNo)
                 sb.Append(s);
             break;
         default:
             ConvertToSMS(sb);
             break;
     }
     return sb.ToString();
 }
 public void FormatPhoneNumber_ShouldFormatToCorrectGivenFormat(string number, string actual, PhoneNumberFormat format)
 {
     Assert.Equal(number.FormatNumber("AU", format, PhoneNumberType.FIXED_LINE_OR_MOBILE, PhoneNumberType.MOBILE, PhoneNumberType.FIXED_LINE), actual);
 }
Example #30
0
        public static string RandomPhoneNumber(PhoneNumberFormat format)
        {
            string phoneNumber = null;

            switch(format)
            {
                case PhoneNumberFormat.Decimal :
                    phoneNumber = string.Format("{0}.{1}.{2}"
                      , RandomInt(200, 999)
                      , RandomInt(100, 999)
                      , RandomInt(1000, 9999));
                    break;
                case PhoneNumberFormat.Dash:
                    phoneNumber = string.Format("{0}-{1}-{2}"
                      , RandomInt(200, 999)
                      , RandomInt(100, 999)
                      , RandomInt(1000, 9999));
                    break;
                case PhoneNumberFormat.Parenthesis:
                    phoneNumber = string.Format("({0}) {1}-{2}"
                      , RandomInt(200, 999)
                      , RandomInt(100, 999)
                      , RandomInt(1000, 9999));
                    break;
            }

            return phoneNumber;
        }