在C#中测试电话号码

Ste*_*ood 1 c#

我有一个奇怪的问题,我正在使用下面的代码来测试一个电话号码,在我的测试中我的代码运行正常.该节目昨天上线,有人使用电话号码08720 123 456,我的代码失败了.你能告诉我为什么0161 287 1234会返回TRUE,08720 123 456会返回FALSE吗?

传真号码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.");
            }
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 5

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("08720123456")); // 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,要验证电话号码,您可以使用正则表达式.


Ode*_*ded 5

int可以采取的值范围从负2,147,483,648到正2,147,483,647.

0161 287 1234在这个范围内,08720 123 456不是.

您不应该以这种方式解析电话号码 - 从数学上讲,它不是一个数字(您能以有意义的方式添加/减去电话号码吗?).

您应该使用正则表达式对其进行验证.