2

我想使用正则表达式匹配逗号分隔的整数列表。我使用了波纹管模式,但它对我不起作用。

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
4

6 回答 6

3

使用这个正则表达式:

^\d+(,\d+)*$
于 2012-07-04T09:48:26.200 回答
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+'。即 1 个或多个数字字符 ('0'-'9')
  • 然后制作一组包含 ',\d+' 的括号,并在其后面加上一个星号。允许 , 和 数字
于 2012-07-04T09:48:08.250 回答
1

你把星号放错地方了。而不是这个:

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

...用这个:

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

此外,您应该像开头一样锚定结尾,并且不需要最外层的括号:

@"^[0-9]+(,[0-9]+)*$"
于 2012-07-05T08:25:40.823 回答
0

您可以使用^\d+(,\d+)*$,但正如@Lazarus 指出的那样,这可能是正则表达式有点矫枉过正的情况,如果您试图操纵数字,string.Split()您甚至可以将其与 a 一起使用。int.tryParse

于 2012-07-04T09:50:39.857 回答
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);

                }
            }
于 2012-07-04T09:54:15.290 回答
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!");    
    }
}
于 2012-07-04T09:58:57.830 回答