我想使用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
答案 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+)*$
答案 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!");
}
}