Me pregunto cuál es la mejor práctica para analizar y validar un número de teléfono 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 principios de año nuevo de escribir un código de mejor calidad!).Mejor práctica para analizar y validar el número de teléfono móvil
En el momento en que son muy indulgente cuando el usuario introduce el número en el formulario, pueden entrar en cosas como "+44 123 4567890", "00441234567890", "", "+44 (0) 123456789", "012-345-6789" o incluso "no tengo un 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 está 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;
}
EDIT
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, "");
}
Recortar cero en lugar de reemplazar "0044". –
Un gran punto, lo he editado ahora, ¡gracias! – annelie
No puede simplemente recortar ceros a la izquierda porque "0712345678" se convertirá en "712345678". También number.Trim recortará los ceros al final y al principio, lo que también es una mala idea. – Polyfun