Zastanawiam się, jaka jest najlepsza praktyka do analizowania i sprawdzania numeru telefonu komórkowego przed wysłaniem tekstu. Mam kod, który działa, ale chciałbym znaleźć lepsze sposoby na zrobienie tego (jak moje ostatnie pytanie, jest to część mojej wczesnej noworocznej rozdzielczości napisania lepszej jakości kodu!).Najlepsza procedura do analizowania i sprawdzania numeru telefonu komórkowego
W chwili obecnej jesteśmy bardzo wyrozumiali, gdy użytkownik wpisuje numer w formularzu, może wprowadzić takie słowa, jak "+44 123 4567890", "00441234567890", "", "+44 (0) 123456789", "012-345-6789" lub nawet "nie masz telefonu".
Jednak, aby wysłać tekst, format musi być w formacie 44xxxxxxxxxx (dotyczy to tylko brytyjskich telefonów komórkowych), dlatego przed wysłaniem musimy go przeanalizować i zweryfikować. Poniżej znajduje się kod, który mam na razie (C#, asp.net), byłoby świetnie, gdyby ktoś miał jakieś pomysły, jak to poprawić.
Dzięki,
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
Oto, co skończyło się z:
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, "");
}
Przyciąć wiodące zero zamiast zastępować "0044". –
Świetny punkt, już go edytowałem, dzięki! – annelie
Nie można po prostu przyciąć początkowych zer, ponieważ "0712345678" stanie się "712345678". Również liczba.Trim wyrówna końcowe i wiodące zera, co również jest złym pomysłem. – Polyfun