C# C MVC-用于具有单个空间或多个空间的整数的正则表达式

C# C MVC-用于具有单个空间或多个空间的整数的正则表达式,c#,regex,asp.net-mvc,C#,Regex,Asp.net Mvc,我有一些正则表达式,它将输入字段限制为带空格的整数: [Required(ErrorMessage = "This field can not be left empty")] [RegularExpression(@"^[\d\s]+$", ErrorMessage = "Please enter integers only with spaces")] public string Numbers { get; set; } 我一直在用单个空格测试我的应用程序,因为任何其他键入的垃圾都是通过

我有一些正则表达式,它将输入字段限制为带空格的整数:

[Required(ErrorMessage = "This field can not be left empty")]
[RegularExpression(@"^[\d\s]+$", ErrorMessage = "Please enter integers only with spaces")]
public string Numbers { get; set; }
我一直在用单个空格测试我的应用程序,因为任何其他键入的垃圾都是通过我的验证检测到的

但是,我刚刚注意到验证不会涉及多个空格,这有点好,因为我希望用户能够像处理单个空格一样进行验证,但这行代码有问题:

List<int> ints = new List<int>();
ints = numbers.TrimEnd().Split(' ').Select(s => int.Parse(s)).OrderBy(i => i).ToList();
它将所有数字拆分,按升序排序,并将它们放入一个列表中,这样看起来Split函数只占一个空格


我不确定最好的解决办法是什么。这可能是一个限制正则表达式到单个空间的情况,如果是这样,或者修改上面的代码以接受多个空格(

< p>),如果您想让用户在字符串中的任何地方输入任意数量的空格,则应该考虑用正则表达式中的空格改变字符串,或者改为字符串。要与输入数据保持一致,或者使用正则表达式用\d+提取数字块

所以,使用其中一种

[RegularExpression(@"^[\d ]+$", ErrorMessage = "Please enter integers only with spaces")]
// ...
ints = numbers.TrimEnd().Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries).Select(s => int.Parse(s)).OrderBy(i => i).ToList();
或者保留与您相同的正则表达式,并使用正则表达式获取所有数字:

ints = Regex.Matches(numbers, @"\d+").Cast<Match>().Select(s => int.Parse(s)).OrderBy(i => i).ToList();

请参阅。

将StringSplitOptions.RemoveEmptyEntries添加到Split方法。如果不想只允许空格或多个空格,可以使用^\d+?:\d+*$use.Splitnew[]{},StringSplitOptions.RemoveEmptyEntries而不是.Split'。您不必限制进入一个或多个空间。但是,将正则表达式更改为^[0-9]+$甚至[0-9]+是有意义的,因为整个输入都应该与正则表达式匹配。我尝试将StringSplitOptions.RemoveEmptyEntries添加到Split方法,但出现了以下错误:无法从System.StringSplitOptions转换为charSee我的上述注释
^ *[0-9]+(?: [0-9]+)* *$
^\s*\d+(?:\s\d+)*\s*$