测试C#中的电话号码
我有一个奇怪的问题,我使用下面的代码来测试电话号码,在我的测试中我的代码工作正常。该程序在昨天直播,有人使用电话号码08720 123 456,我的代码失败。你能告诉我为什么它会返回TRUE为0161 287 1234和FALSE为08720 123 456?测试C#中的电话号码
传真号码1:0161 287 1234 ---> ISNUMBER返回TRUE 传真号码2:08720 123 456 ---> ISNUMBER返回FALSE
static bool IsNumber(string value)
{
// Return true if this is a number.
int number1;
return int.TryParse(value, out number1);
}
bool testForFax = IsNumber(faxOrEmail);
if (testForFax == true)
{
backgroundWorker2.RunWorkerAsync(); //send fax
}
else
{
MessageBox.Show("Please enter a fax number.");
}
该int
可以取的值的范围是从负2147483648通过积极2147483647。
0161 287 1234
在该范围内,08720 123 456
不是。
你不应该这样解析一个电话号码 - 它不是,从数学上讲,一个数字(你能以一种有意义的方式加法/减法的电话号码?)。
你应该使用regular expression验证。
的int.TryParse
方法试图解析整数不电话和传真。你不能只是抛出任何字符串,并期望得到一个整数。如果您希望将其成功解析为整数,则字符串中不应有任何空格。
两个字符串返回false:
class Program
{
static void Main()
{
Console.WriteLine(IsNumber("0161 287 1234")); // false
Console.WriteLine(IsNumber("08720 123 456")); // false
Console.WriteLine(IsNumber("01612871234")); // true
Console.WriteLine(IsNumber("0872")); // false because you overflowed Int32 which can store a maximum value of 2147483648
}
static bool IsNumber(string value)
{
int number1;
return int.TryParse(value, out number1);
}
}
因此,为了验证,你可以使用正则表达式的电话号码。
当然,电话号码只是一个数字时空间被删除? – 2012-01-13 10:45:55
@SteveWood是的,它可以归结为一个数字,但不是每个数字都可以是一个电话号码 - 它具有结构。 – 2012-01-13 10:47:34
@SteveWood,不,因为您只能在Int32类型中存储有限数字。看我的例子。 – 2012-01-13 10:48:11
你可以去掉空格并检查数字。
使用正则表达式可能是另一个不错的选择。
因为08720 123 456超过了整数的最大值。这是最大值:2,147,483,647。
不要使用int.TryParse
,但使用正则表达式来检查,如果该值是一个电话号码。
好的谢谢,这解释了它。 – 2012-01-13 10:46:27
一个Ints范围是-2,147,483,648到2,147,483,647。所以0161 287 1234,将被正确解析为1612871234,而08720 123 456超出范围并且不会被解析。所以我建议你使用RegEx来匹配一个字符模式或其他东西。
的整数的最大值为2147483647,你的第二数量超过该值。
这个怎么样?
string number = "08720 123 456";
bool testForFax = number.All(c => Char.IsNumber(c) || Char.IsWhitespace(c))
public static bool IsFaxNumber(string faxNo)
{
bool returnValue = false;
var items = faxNo.Split(' ');
if (faxNo.Length == 13 && items.Length == 3)
if (items[0].Length == 4 && items[1].Length == 3 && items[2].Length == 4)
returnValue = true;
return returnValue;
}
谁是史蒂夫和你为什么要感谢他? – Default 2012-01-13 10:43:13
[电话号码验证综合正则表达式]的可能重复(http://*.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – 2012-01-13 10:49:27