我是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(不是字符)的数字也是好的).
这个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));
在以下解决方案中,您可以使用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) }