【发布时间】:2019-10-18 22:40:46
【问题描述】:
我有一些 regex 将 input 字段限制为带空格的整数:
[Required(ErrorMessage = "This field can not be left empty")]
[RegularExpression(@"^[\d\s]+$", ErrorMessage = "Please enter integers only with spaces")]
public string Numbers { get; set; }
我一直在用单个空格测试我的应用程序,因为输入的任何其他垃圾都是通过我的验证检测到的。
但是,我刚刚注意到验证不会在 multiple 空格上使用,这很好,因为我希望用户能够做到这一点以及 single 个空格,但我发现这行代码有问题:
List<int> ints = new List<int>();
ints = numbers.TrimEnd().Split(' ').Select(s => int.Parse(s)).OrderBy(i => i).ToList();
它将所有数字拆分,按升序排序,并将它们放入List<int>,因此看起来Split 函数只占一个空间。
我不确定最好的解决方案是什么。可能是将regex 限制为单个 空格的情况,如果是这样,那会是什么情况,或者修改上面的代码以接受多个空格?
【问题讨论】:
-
将
StringSplitOptions.RemoveEmptyEntries添加到Split方法。 -
如果您不想只允许空格或多个空格,您可以使用
^\d+(?: \d+)*$ -
使用
.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries)而不是.Split(' ')。您不必限制输入一个或多个空格。但是,将正则表达式更改为^[0-9 ]+$甚至[0-9 ]+是有意义的,因为整个输入应该与正则表达式匹配。 -
我尝试将
StringSplitOptions.RemoveEmptyEntries添加到Split方法中,但出现此错误:cannot convert from System.StringSplitOptions to char -
看我上面的评论
标签: c# regex asp.net-mvc