Интересно, как лучше разбирать и проверять номер мобильного телефона перед отправкой текста?У меня есть код, который работает, но я хотел бы найти более эффективные способы сделать это (как мой последний вопрос, это часть моего раннего новогоднего решения написать код лучшего качества!).
В настоящее время мы очень прощаем, когда пользователь вводит число в форму, они могут вводить такие вещи, как "+44 123 4567890", "00441234567890", "0123456789", "+44 (0) 123456789", "012-345-6789 "или даже" у меня нет телефона ".
Однако для отправки текста формат должен быть 44хххххххххх (это только для мобильных телефонов Великобритании), поэтому нам нужно проанализировать его и проверить его передмы можем отправить.Ниже приведен код, который у меня есть на данный момент (C #, asp.net), было бы замечательно, если бы у кого-нибудь были идеи, как его улучшить.
Спасибо,
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;
}
РЕДАКТИРОВАТЬ
Вот что я закончил:
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, "");
}