我有一个C#格式的文本框,我希望用户只需按以下格式输入数字:
###,###,###
这意味着用户可以输入任意数字,最多3位数,然后输入逗号和其他数字,依此类推。所有3个数字不一定是必需的,但至少应该是1个数字。
澄清我已在下面举例说明
333,222,111 > Correct
3,1,2 > Correct
3 > Correct
0 > Incorrect
3, > Incorrect
3,3 > Correct
33,22 > Correct
3,22 > Correct
3,33, > Incorrect
3,33,, > Incorrect
33,33,33,33 > Incorrect
33 > Correct
当人在文本框中输入字符串后单击按钮时,将检查此项。如果不正确不正确,则消息框应该只是说“数字格式不正确”。
答案 0 :(得分:2)
正如Brandley所说,进行正则表达式检查。
^([1-9]\d{0,2},\d{1,3},\d{1,3}|[1-9]\d{0,2},\d{1,3}|[1-9]\d{0,2})$
已编辑:如果正则表达式不是解决方案,则执行拆分
string[] sArray = yourString.Split(',');
if(sArray.Length > 3)
return false;
foreach(string element in sArray)
{
if (//int try parse)
{
if (//parsed int >1000 or <0)
return false;
}
else
{
return false;
}
}
答案 1 :(得分:2)
您可以解析没有正则表达式的输入字符串,如下所示:
public static bool IsValid(string input)
{
if (string.IsNullOrWhiteSpace(input))
return false;
string[] tokens = input.Split(',');
if (tokens.Length > 3)
return false;
foreach (string token in tokens)
{
if (String.IsNullOrWhiteSpace(token))
return false;
int val;
if (!int.TryParse(token, out val))
return false;
if (val <= 0 || val > 999)
return false;
}
return true;
}
答案 2 :(得分:0)
这是正则表达式的一个很好的候选者,即匹配:
^((\ d {3},)* \ d?\ d?\ d)$
像这样使用:
var regex = new Regex(@"^((\d{3},)*\d?\d?\d)$");
return regex.Matches(strInput);
000,000,000和0是这个正则表达式的有效数字(也是实际数字!)