拆分字符串并分别检查每个字符串

use*_*298 1 c# string split

我是C#的初学者,试图学习自己,我正在做一个需要以下的练习.

制作标签,文本框和按钮,文本框包含格式为XXX-XXX-XXX的数字,其中每个X都是0-9的数字.因此,我必须检查给定的数字是否有效(9位数)以及该数字的前三位是(070,071,072,075,076,077,078).

所以基本上,每个数字必须从这3个数字开始,然后检查其余6个数字,如果它们是6(不是更多),如果它们是0-9的数字.

到目前为止,这是我的代码:

private void btnProveri_Click(object sender, EventArgs e)
{
    string s = txtTelefon.Text;
    string[] nums = s.Split('-');
    foreach (string num in nums)
    {
        if (num.Length > 3)
        {
            lblRezultat.Text = "Invalid number.";
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?检查前三个数字是否为特定数字,并检查其余部分是否为3个数字(检查它们是否为0-9(不是字符)的数字也是好的).

Har*_*son 5

在以下解决方案中,您可以使用IEnumerable.Contains()根据您的条件检查第一个数字.这会根据您的价值检查每个成员.

然后在确保每个值为三位数后,我尝试将其转换为整数以确保其格式正确 Int32.TryParse

string s = txtTelefon.Text;
string[] nums = s.Split('-');
int counter = 0;
IEnumerable<string> first = new List<string> { "070", "071", "072", "075", "076", "077", "078" };
foreach (string num in nums)
{
    if (num.Length != 3)
    {
        lblRezultat.Text = "Invalid number.";
        break;
    }
    else if (counter==0)
    {
        if (!first.Contains(num))
        {
            // first 3 digits don't match pattern
            break;
        }
    }
    else 
    {
        int try = 0;
        if (!int.TryParse(num, try))
        {
             // not a 3 digit number
             break;
        }
    }

    counter++
}
if (counter != 3)
{
    // wrong number of splits (111-222-333-444)
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 5

这个LINQ方法应该工作,不需要解析它int或使用正则表达式:

string[] nums = "076-123-456".Split('-');
var startNums = new[]{"070","071","072","075","076","077","078"};
bool valid = nums.Length == 3 && 
             startNums.Contains(nums[0]) &&
             nums.Skip(1).All(n => n.Length==3 && n.All(Char.IsDigit)); 
Run Code Online (Sandbox Code Playgroud)