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

时间:2013-12-15 22:04:19

标签: 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;
        }
    }
}

我怎样才能进一步做到?检查前三个数字是否为特定数字并检查其余部分是否为3个数字(检查它们是否为0-9(不是字符)的数字也是好的。)

4 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分: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)); 

答案 2 :(得分:2)

在您的问题中给出一个正则表达式可以解决问题的例子:

var pattern = @"^07[0125678]-\d{3}-\d{3}$" 

以上匹配任何字符串从07X开始,X在方括号中,后跟连字符,然后是三位数,重复两次。

if( !Regex.IsMatch(txtTelefon.Text, pattern) )
{
    lblRezultat.Text = "Invalid number.";
}  

答案 3 :(得分:0)

    var s = "XXX-XXX-XXX";
    if (!Regex.IsMatch(s, @"^[070|071|072|075|076|077|078]-\d{3}-\d{3}$")))
    {
        //wrong format
    }