Tôi tự hỏi thực tiễn nào tốt nhất để phân tích cú pháp và xác thực số điện thoại di động trước khi gửi văn bản. Tôi đã có mã hoạt động, nhưng tôi muốn tìm ra cách tốt hơn để làm điều đó (như câu hỏi cuối cùng của tôi, đây là một phần của độ phân giải năm mới của tôi để viết mã chất lượng tốt hơn!).Thực hành tốt nhất để phân tích cú pháp và xác thực số điện thoại di động
Hiện tại, chúng tôi rất tha thứ khi người dùng nhập số vào biểu mẫu, họ có thể nhập các thông tin như "+44 123 4567890", "00441234567890", "", "+44 (0) 123456789", "012-345-6789" hoặc thậm chí "chưa có điện thoại".
Tuy nhiên, để gửi văn bản, định dạng phải là 44xxxxxxxxxx (chỉ dành cho điện thoại di động ở Vương quốc Anh), vì vậy chúng tôi cần phân tích cú pháp và xác thực nó trước khi chúng tôi có thể gửi. Dưới đây là mã mà tôi có bây giờ (C#, asp.net), nó sẽ là tuyệt vời nếu bất cứ ai có bất kỳ ý tưởng về cách cải thiện nó.
Cảm ơn,
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
Đây là những gì tôi đã kết thúc với:
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, "");
}
Cắt số 0 đứng đầu thay vì thay thế "0044". –
Điểm tuyệt vời, tôi đã chỉnh sửa nó ngay bây giờ, cảm ơn! – annelie
Bạn không thể chỉ cắt các số 0 đứng đầu vì "0712345678" sẽ trở thành "712345678". Ngoài ra number.Trim sẽ cắt trailing và số 0 hàng đầu, đó là ý tưởng tồi quá. – Polyfun