正则表达式匹配c#中的单独整数列表

时间:2012-07-04 09:44:23

标签: c# regex

我想使用Regex匹配逗号单独的整数列表。我使用了波纹管模式,但它对我不起作用。

if (!Regex.IsMatch(textBox_ImportRowsList.Text, @"^([0-9]+(,[0-9]+))*"))
{
        errorProvider1.SetError(label_ListRowPosttext, "Row Count invalid!");
}

有效输入:

1
1,2
1,4,6,10

输入无效:

1,
1.1
1,A
2,/,1
,1,3

6 个答案:

答案 0 :(得分:3)

使用这个正则表达式:

^\d+(,\d+)*$

答案 1 :(得分:2)

修改

验证逗号分隔字符串的最佳方法是

string someString = "1,2,3"; 


bool myResults = someString.Split(';').
       Any<string>(s => !isNumeric(s)); 
if(myResults)
  Console.Writeln("invalid number");
else
  Console.Writeln("valid number");


public bool isNumeric(string val)
{
    if(val == String.Empty)
      return false;       
    int result;
    return int.TryParse(val,out result);
}

以下内容也适用于您。这个正则表达式也会捕获一个空字符串。

^(\d+(,\d+)*)?$

 ^\d+(,\d+)*$ 
  • 以整数开头,所以'\ d +'。这是一个或多个数字字符('0' - '9')
  • 然后制作一组包含',\ d +'的括号,并在其后面加一个星号。允许和数字

答案 2 :(得分:1)

你的星号在错误的地方。而不是:

@"^([0-9]+(,[0-9]+))*"

...使用此:

@"^([0-9]+(,[0-9]+)*)"

另外,你应该像开头那样锚定结尾,并且不需要最外面的括号:

@"^[0-9]+(,[0-9]+)*$"

答案 3 :(得分:0)

你可以使用^\d+(,\d+)*$但正如@Lazarus指出的那样,这可能是正则表达式有点矫枉过正的情况,string.Split()会更好地利用你甚至可以用{ {1}}如果您正在尝试操纵数字。

答案 4 :(得分:0)

您可以尝试使用此代码

 List<string> list = new List<string>();
            list.Add("1");
            list.Add("1.1");
            list.Add("1,A");
            list.Add("2,/,1");


            foreach (var item in list)
            {
                if (!Regex.IsMatch(item, @"^([0-9](,[0-9])*)$"))
                {
                    Console.WriteLine("no match :" + item);

                }
            }

答案 5 :(得分:0)

尝试这个

String strInput = textBox_ImportRowsList.Text;
foreach (String s in strInput.Split(new[]{',', ' '}, StringSplitOptions.RemoveEmptyEntries))
{
    if(!Regex.IsMatch(s, @"^\d+(,\d+)*$"))
    {
        errorProvider1.SetError(label_ListRowPosttext, "Row Count invalid!");    
    }
}