我是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(不是字符)的数字也是好的。)
答案 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
}