我需要格式化一个文本框以接受数字###,###,###

时间:2014-10-17 23:33:51

标签: c# .net

我有一个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

当人在文本框中输入字符串后单击按钮时,将检查此项。如果不正确不正确,则消息框应该只是说“数字格式不正确”。

3 个答案:

答案 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是这个正则表达式的有效数字(也是实际数字!)