Prática recomendada para analisar e validar número de celular
Gostaria de saber qual é a melhor prática para analisar e validar um número de celular antes de enviar um texto. Eu tenho um código que funciona, mas eu gostaria de descobrir maneiras melhores de fazê-lo (como minha última pergunta, isso faz parte da minha resolução de início de ano novo para escrever um código de melhor qualidade!).
No momento, perdoamos muito quando o usuário digita o número no formulário, ele pode inserir coisas como "+44 123 4567890", "00441234567890", "0123456789", "+44 (0) 123456789", "012-345 -6789 "ou mesmo" não tenho telefone ".
No entanto, para enviar o texto, o formato deve ser 44xxxxxxxxxx (isso é apenas para celulares do Reino Unido), portanto, precisamos analisá-lo e validá-lo antes de podermos enviar. Abaixo está o código que tenho por enquanto (C #, asp.net), seria ótimo se alguém tivesse alguma idéia de como melhorá-lo.
Obrigado,
Annelie
private bool IsMobileNumberValid(string mobileNumber)
{
// parse the number
_mobileNumber = ParsedMobileNumber(mobileNumber);
// check if it's the right length
if (_mobileNumber.Length != 12)
{
return false;
}
// check if it contains non-numeric characters
if(!Regex.IsMatch(_mobileNumber, @"^[-+]?[0-9]*\.?[0-9]+$"))
{
return false;
}
return true;
}
private string ParsedMobileNumber(string number)
{
number = number.Replace("+", "");
number = number.Replace(".", "");
number = number.Replace(" ", "");
number = number.Replace("-", "");
number = number.Replace("/", "");
number = number.Replace("(", "");
number = number.Replace(")", "");
number = number.Trim(new char[] { '0' });
if (!number.StartsWith("44"))
{
number = "44" + number;
}
return number;
}
EDITAR
Aqui está o que eu acabei com:
private bool IsMobileNumberValid(string mobileNumber)
{
// remove all non-numeric characters
_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("440"))
{
_mobileNumber = _mobileNumber.Remove(2, 1);
}
// add country code if they haven't entered it
if (!_mobileNumber.StartsWith("44"))
{
_mobileNumber = "44" + _mobileNumber;
}
// check if it's the right length
if (_mobileNumber.Length != 12)
{
return false;
}
return true;
}
private string CleanNumber(string phone)
{
Regex digitsOnly = new Regex(@"[^\d]");
return digitsOnly.Replace(phone, "");
}