I wonder what is the best practice for parsing and checking a mobile number before sending text. I have code that works, but I would like to find more efficient ways to execute it (as my last question, this is part of my early resolution for new years to write better quality code!).
At the moment, we really forgive when a user enters a number in the form, they can enter things like "+44 123 4567890", "00441234567890", "0123456789", "+44 (0) 123456789", 012-345-6789 "or even" did not receive the phone. "
However, to send text, the format must be 44xxxxxxxxxx (this is only for UK mobile phones), so we need to parse it and check it before we can send it. Below is the code that I have at the moment (C #, asp.net), it would be great if anyone had ideas on how to improve it.
Thanks,
Anneli
private bool IsMobileNumberValid(string mobileNumber) { // parse the number _mobileNumber = ParsedMobileNumber(mobileNumber); // check if it 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
Here is what I ended up with:
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 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, ""); }
annelie
source share