C# MVC - 具有单个空格或多个空格的整数的正则表达式
Posted
技术标签:
【中文标题】C# MVC - 具有单个空格或多个空格的整数的正则表达式【英文标题】:C# MVC - Regex for integers with a single space or multiple spaces 【发布时间】: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
看我上面的评论
【参考方案1】:
如果您想让用户在字符串的任意位置输入任意数量的空格,您应该考虑在正则表达式中使用空格更改\s
,或者使用String.Split()
来代替@987654324 @ 与 \s+
模式,以与输入数据保持一致,或者简单地使用正则表达式提取具有 \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();
如果您打算禁止在数字之间输入超过 1 个空格,请使用以下任一
^ *[0-9]+(?: [0-9]+)* *$
^\s*\d+(?:\s\d+)*\s*$
请参阅regex demo。
【讨论】:
以上是关于C# MVC - 具有单个空格或多个空格的整数的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章