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); }
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()); }
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); } }
/// <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); } }
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); }
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; }
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); }
/// <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); }
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; }