private string FormatNumber(string phone) { var number = _phoneUtil.Parse(phone, "GB"); if (!_phoneUtil.IsValidNumber(number)) { throw new Exception($"Invalid phone number: {phone}"); } _phoneUtil.FormatOutOfCountryCallingNumber(number, "GB"); return(_phoneUtil.Format(number, PhoneNumberFormat.E164).Replace("+", "")); }
public IActionResult OnPost() { if (!ModelState.IsValid) { return(Page()); } try { PhoneNumber phoneNumber = _phoneUtil.Parse(PhoneNumberCheck.PhoneNumberRaw, PhoneNumberCheck.CountryCodeSelected); var valid = _phoneUtil.IsValidNumberForRegion(phoneNumber, PhoneNumberCheck.CountryCodeSelected); Debug.Print($"{phoneNumber} is {valid} for region {PhoneNumberCheck.CountryCodeSelected}"); ModelState.FirstOrDefault(x => x.Key == $"{nameof(PhoneNumberCheck)}.{nameof(PhoneNumberCheck.CountryCodeSelected)}").Value.RawValue = PhoneNumberCheck.CountryCodeSelected; ModelState.FirstOrDefault(x => x.Key == $"{nameof(PhoneNumberCheck)}.{nameof(PhoneNumberCheck.PhoneNumberRaw)}").Value.RawValue = PhoneNumberCheck.PhoneNumberRaw; ModelState.FirstOrDefault(x => x.Key == $"{nameof(PhoneNumberCheck)}.{nameof(PhoneNumberCheck.Valid)}").Value.RawValue = _phoneUtil.IsValidNumberForRegion(phoneNumber, PhoneNumberCheck.CountryCodeSelected); ModelState.FirstOrDefault(x => x.Key == $"{nameof(PhoneNumberCheck)}.{nameof(PhoneNumberCheck.PhoneNumberType)}").Value.RawValue = _phoneUtil.GetNumberType(phoneNumber); ModelState.FirstOrDefault(x => x.Key == $"{nameof(PhoneNumberCheck)}.{nameof(PhoneNumberCheck.RegionCode)}").Value.RawValue = _phoneUtil.GetRegionCodeForNumber(phoneNumber); ModelState.FirstOrDefault(x => x.Key == $"{nameof(PhoneNumberCheck)}.{nameof(PhoneNumberCheck.PhoneNumberFormatted)}").Value.RawValue = _phoneUtil.FormatOutOfCountryCallingNumber(phoneNumber, PhoneNumberCheck.CountryCodeSelected); ModelState.FirstOrDefault(x => x.Key == $"{nameof(PhoneNumberCheck)}.{nameof(PhoneNumberCheck.PhoneNumberMobileDialing)}").Value.RawValue = _phoneUtil.FormatNumberForMobileDialing(phoneNumber, PhoneNumberCheck.CountryCodeSelected, true); return(Page()); } catch (NumberParseException npex) { ModelState.AddModelError(npex.ErrorType.ToString(), npex.Message); } return(Page()); }
public IActionResult Check(PhoneNumberCheckViewModel model) { if (model == null) { throw new ArgumentException(nameof(model)); } if (ModelState.IsValid) { try { PhoneNumber phoneNumber = _phoneUtil.Parse(model.PhoneNumberRaw, model.CountryCodeSelected); ModelState.FirstOrDefault(x => x.Key == nameof(model.Valid)).Value.RawValue = _phoneUtil.IsValidNumberForRegion(phoneNumber, model.CountryCodeSelected); ModelState.FirstOrDefault(x => x.Key == nameof(model.PhoneNumberType)).Value.RawValue = _phoneUtil.GetNumberType(phoneNumber); ModelState.FirstOrDefault(x => x.Key == nameof(model.CountryCode)).Value.RawValue = _phoneUtil.GetRegionCodeForNumber(phoneNumber); ModelState.FirstOrDefault(x => x.Key == nameof(model.PhoneNumberFormatted)).Value.RawValue = _phoneUtil.FormatOutOfCountryCallingNumber(phoneNumber, "US"); ModelState.FirstOrDefault(x => x.Key == nameof(model.PhoneNumberMobileDialing)).Value.RawValue = _phoneUtil.FormatNumberForMobileDialing(phoneNumber, model.CountryCodeSelected, true); ModelState.FirstOrDefault(x => x.Key == nameof(model.HasExtension)).Value.RawValue = phoneNumber.HasExtension; ModelState.FirstOrDefault(x => x.Key == nameof(model.CountryCodeSelected)).Value.RawValue = model.CountryCodeSelected; ModelState.FirstOrDefault(x => x.Key == nameof(model.PhoneNumberRaw)).Value.RawValue = model.PhoneNumberRaw; model.Countries = _countries.CountrySelectList; return(View(model)); } catch (NumberParseException npex) { ModelState.AddModelError(npex.ErrorType.ToString(), npex.Message); } } model.Countries = _countries.CountrySelectList; ModelState.SetModelValue(nameof(model.CountryCodeSelected), model.CountryCodeSelected, model.CountryCodeSelected); ModelState.SetModelValue(nameof(model.PhoneNumberRaw), model.PhoneNumberRaw, model.PhoneNumberRaw); ModelState.SetModelValue(nameof(model.Valid), false, null); model.Valid = false; ModelState.SetModelValue(nameof(model.HasExtension), false, null); model.HasExtension = false; ModelState.SetModelValue(nameof(model.PhoneNumberType), null, null); model.PhoneNumberType = null; ModelState.SetModelValue(nameof(model.CountryCode), null, null); model.CountryCode = null; ModelState.SetModelValue(nameof(model.PhoneNumberFormatted), null, null); model.PhoneNumberFormatted = null; ModelState.SetModelValue(nameof(model.PhoneNumberMobileDialing), null, null); model.PhoneNumberMobileDialing = null; return(View(model)); }
public GenericResponse <ValidatePhoneNumberModel> FormatePhoneNumberForDisplay(string telephoneNumber, string dialFrom) { ///format-number-for-display?number=075450175&countryCode=GB&dialFrom=US GenericResponse <ValidatePhoneNumberModel> returnResult; if (string.IsNullOrEmpty(telephoneNumber)) { string errorMessage = "Error : The string supplied did not seem to be a phone number"; returnResult = new GenericResponse <ValidatePhoneNumberModel>() { Message = errorMessage, StatusCode = HttpStatusCode.BadRequest, StatusMessage = "Failed" }; // throw new ArgumentException(); return(returnResult); } else if ((string.IsNullOrEmpty(dialFrom)) || ((dialFrom.Length != 2) && (dialFrom.Length != 3))) { string errorMessage = "Error : Invalid country calling code"; returnResult = new GenericResponse <ValidatePhoneNumberModel>() { Message = errorMessage, StatusCode = HttpStatusCode.BadRequest, StatusMessage = "Failed" }; return(returnResult); } else { PhoneNumberUtil phoneUtil = PhoneNumberUtil.GetInstance(); try { PhoneNumbers.PhoneNumber phoneNumber = phoneUtil.Parse(telephoneNumber, dialFrom); bool isMobile = false; string displayNumber = string.Empty; bool isValidNumber = phoneUtil.IsValidNumber(phoneNumber); // returns true for valid number bool isValidRegion = phoneUtil.IsValidNumberForRegion(phoneNumber, dialFrom); // returns true w.r.t phone number region string region = phoneUtil.GetRegionCodeForNumber(phoneNumber); // GB, US , PK var numberType = phoneUtil.GetNumberType(phoneNumber); // Produces Mobile , FIXED_LINE string phoneNumberType = numberType.ToString(); if (!string.IsNullOrEmpty(phoneNumberType) && phoneNumberType == "MOBILE") { isMobile = true; } if (isValidRegion) { displayNumber = phoneUtil.Format(phoneNumber, PhoneNumberFormat.NATIONAL); // Produces 07825 152591 } else { // Produces International format: +44 7825 152591 //Out - of - country format from US: 011 44 7825 152591 //Out - of - country format from Switzerland: 00 44 7825 152591 displayNumber = phoneUtil.FormatOutOfCountryCallingNumber(phoneNumber, dialFrom); } var data = new ValidatePhoneNumberModel { FormattedNumber = displayNumber, IsMobile = isMobile, IsValidNumber = isValidNumber, IsValidNumberForRegion = isValidRegion, Region = region }; returnResult = new GenericResponse <ValidatePhoneNumberModel>() { Data = data, StatusCode = HttpStatusCode.OK, StatusMessage = "Success" }; } catch (NumberParseException ex) { var errorMessage = "FormatePhoneNumberForDisplay was thrown: " + ex.Message.ToString(); Console.WriteLine(errorMessage); returnResult = new GenericResponse <ValidatePhoneNumberModel>() { Message = errorMessage, StatusCode = HttpStatusCode.BadRequest, StatusMessage = "Failed" }; } return(returnResult); } }
public IActionResult Check(PhoneNumberCheckViewModel model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } if (ModelState.IsValid) { try { // Parse the number to check into a PhoneNumber object. PhoneNumber phoneNumber = _phoneUtil.Parse(model.PhoneNumberRaw, model.CountryCodeSelected); // Use the PhoneNumber object to get information from the utility and assign it to the raw state of the model. // The values can't be assigned directly to the model because they have previously existing models. // ASP.NET Core Tag Helpers work differently than Html Helpers in this respect (and others). ModelState.FirstOrDefault(x => x.Key == nameof(model.Valid)).Value.RawValue = _phoneUtil.IsValidNumberForRegion(phoneNumber, model.CountryCodeSelected); ModelState.FirstOrDefault(x => x.Key == nameof(model.PhoneNumberType)).Value.RawValue = _phoneUtil.GetNumberType(phoneNumber); ModelState.FirstOrDefault(x => x.Key == nameof(model.CountryCode)).Value.RawValue = _phoneUtil.GetRegionCodeForNumber(phoneNumber); ModelState.FirstOrDefault(x => x.Key == nameof(model.PhoneNumberFormatted)).Value.RawValue = _phoneUtil.FormatOutOfCountryCallingNumber(phoneNumber, "US"); ModelState.FirstOrDefault(x => x.Key == nameof(model.PhoneNumberMobileDialing)).Value.RawValue = _phoneUtil.FormatNumberForMobileDialing(phoneNumber, model.CountryCodeSelected, true); ModelState.FirstOrDefault(x => x.Key == nameof(model.HasExtension)).Value.RawValue = phoneNumber.HasExtension; // The submitted value has to be returned as the raw value. ModelState.FirstOrDefault(x => x.Key == nameof(model.CountryCodeSelected)).Value.RawValue = model.CountryCodeSelected; ModelState.FirstOrDefault(x => x.Key == nameof(model.PhoneNumberRaw)).Value.RawValue = model.PhoneNumberRaw; // Because the Countries property of the view model doesn't exist at this point (it's not passed back by // the model binder when the form is submitted) it can be assigned directly before being returned to the view. model.Countries = _countries.CountrySelectList; return(View(model)); } catch (NumberParseException npex) { // If PhoneNumberUtil throws an error, add it to the list of ModelState errors. // This will change ModelState.IsValid to false. ModelState.AddModelError(npex.ErrorType.ToString(), npex.Message); } } // If there is an unspecified ModelState error or a NumberParseException // repopulate the list of countries, selected country, and attempted phone number. // Clear the values of the results in both the ModelState values and the model. // Doing both is required by MVC handling of Tag Helpers. For Html Helpers, only // the model values need to be reset. // In production code, the results section would best be implemented with a partial // page with its own view model, which could then be reinitialized for each new // attempt. It's handled this way to keep the focus on the library functionality. model.Countries = _countries.CountrySelectList; ModelState.SetModelValue(nameof(model.CountryCodeSelected), model.CountryCodeSelected, model.CountryCodeSelected); ModelState.SetModelValue(nameof(model.PhoneNumberRaw), model.PhoneNumberRaw, model.PhoneNumberRaw); ModelState.SetModelValue(nameof(model.Valid), false, null); model.Valid = false; ModelState.SetModelValue(nameof(model.HasExtension), false, null); model.HasExtension = false; ModelState.SetModelValue(nameof(model.PhoneNumberType), null, null); model.PhoneNumberType = null; ModelState.SetModelValue(nameof(model.CountryCode), null, null); model.CountryCode = null; ModelState.SetModelValue(nameof(model.PhoneNumberFormatted), null, null); model.PhoneNumberFormatted = null; ModelState.SetModelValue(nameof(model.PhoneNumberMobileDialing), null, null); model.PhoneNumberMobileDialing = null; return(View(model)); }