【发布时间】:2010-12-30 14:28:56
【问题描述】:
我想知道在发送文本之前解析和验证手机号码的最佳做法是什么。我有可以工作的代码,但我想找到更好的方法(作为我的最后一个问题,这是我新年初决心编写更好质量代码的一部分!)。
目前我们非常宽容用户在表单上输入数字时,他们可以输入诸如“+44 123 4567890”、“00441234567890”、“0123456789”、“+44(0)123456789”、“ 012-345-6789”甚至“没有电话”。
但是,要发送文本,格式必须为 44xxxxxxxxxx(这仅适用于英国手机),因此我们需要先对其进行解析和验证,然后才能发送。以下是我现在拥有的代码(C#,asp.net),如果有人对如何改进它有任何想法,那就太好了。
谢谢,
安妮
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, "");
}
【问题讨论】:
-
修剪前导零而不是替换“0044”。
-
好点子,我已经编辑过了,谢谢!
-
您不能只修剪前导零,因为“0712345678”将变为“712345678”。 number.Trim 也会修剪尾随和前导零,这也是个坏主意。
-
@ShellShock - 我确实想去掉前导零,但你是对的,在执行 number.Trim 时尾随零也会消失。我必须找到另一种方法来修剪领先的。
标签: c# asp.net parsing validation