Las mejores prácticas para analizar y validar el número de teléfono móvil
Me pregunto cuál es la mejor práctica para analizar y validar un número de móvil antes de enviar un mensaje de texto. Tengo un código que funciona, pero me gustaría encontrar mejores formas de hacerlo (como mi última pregunta, ¡esto es parte de mi resolución de año nuevo para escribir un código de mejor calidad!).
Por el momento, somos muy indulgentes cuando el usuario ingresa el número en el formulario, puede ingresar cosas como "+44 123 4567890", "00441234567890", "0123456789", "+44 (0) 123456789", "012-345 -6789 "o incluso" no tengo teléfono ".
Sin embargo, para enviar el texto, el formato debe ser 44xxxxxxxxxx (esto es solo para móviles del Reino Unido), por lo que debemos analizarlo y validarlo antes de poder enviarlo. A continuación se muestra el código que tengo por ahora (C #, asp.net), sería genial si alguien tuviera alguna idea sobre cómo mejorarlo.
Gracias,
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
Esto es lo que terminé con:
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, "");
}