I am using libphonenumber-csharp and when I make the following call:
PhoneNumberUtil = PhoneNumberUtil.GetInstance();
var phoneNumber = PhoneNumberUtil.Parse(e164PhoneNumber, null);
return PhoneNumberUtil.Format(phoneNumber, PhoneNumberFormat.INTERNATIONAL);
I get "+1 303-123-4567". How can I instead get "+1 (303) 123-4567"?
Is my best bet to use regular expressions and if it's "+1 ###-###-####" then adjust it? I think that would be safe as the +1 tells me it's U.S.
Here's what I did. It works. And it uses the libphonenumber returned string if it's not exactly "+1 303-123-4567..." and so should be safe. Keep in mind this does not need to handle all possible phone formats. It only needs to handle the format libphonenumber returns.
private static PhoneNumberUtil? PhoneNumberUtil { get; }
static MiscUtils()
{
PhoneNumberUtil = PhoneNumberUtil.GetInstance();
}
public static string FormatPhoneNumber(string e164PhoneNumber)
{
if (PhoneNumberUtil == null)
return e164PhoneNumber;
var phoneNumber = PhoneNumberUtil.Parse(e164PhoneNumber, null);
var formattedNumber = PhoneNumberUtil.Format(phoneNumber, PhoneNumberFormat.INTERNATIONAL);
// returns "+1 650-253-0000", maybe with an extension
if (!PhoneRegex.IsMatch(formattedNumber))
return formattedNumber;
// Want "+1 (650) 253-0000"
return $"+1 ({formattedNumber[3..6]}) {formattedNumber[7..]}";
}