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 に答える
0

使用することもできます^\d+(,\d+)*$が、@Lazarus が指摘しているように、これは正規表現が少し過剰であり、数値を操作しようとしている場合はstring.Split()これを使用することもできます。int.tryParse

于 2012-07-04T09:50:39.857 に答える
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 に答える
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 に答える