约束验证的最佳方法是在ASP.NET中不允许任何空格

问题描述

|| 我有不同的情况: 完全不允许有空格 仅在字符串的开头或结尾不允许有空格 ..一个小问题,是否可以通过RegularExpressionValidator的RegEx检查(验证)空格的输入?     

解决方法

在上一个问题中,您提到想要输入0到50个字符。如果仍然如此,这就是您想要的:
/^\\S{0,50}$/
/^(?!\\s).{0,50}(?<!\\s)$/
到目前为止,我认为这是发布的唯一正则表达式,第一种模式允许少于一个字母,而第二种模式允许少于两个字母。 正则表达式不是“坏”的东西,它们只是一个专用工具,并不适合所有任务。如果您要尝试验证ASP.NET中的输入,我肯定会为这种特定模式使用RegularExpressionValidator,因为否则,您将不得不浪费时间编写CustomValidator来获得微不足道的性能提升。有关何时以及何时不使用正则表达式的一些指导,请参见我对另一个问题的回答。 在这种情况下,我使用正则表达式验证器的原因与模式本身无关,而与ASP.NET有关。只需将RegularExpressionValidator拖放到您的ASPX代码中,您只需编写10至21个字符的正则表达式即可。使用CustomValidator,您将必须在代码隐藏和JavaScript中编写自定义验证功能。您可能会从中挤出更多性能,但请考虑何时开始进行验证:每个回发仅一次。性能差异将小于一毫秒。对于您或您的雇主来说,根本不值得您花时间作为开发人员。请记住:硬件便宜,程序员昂贵,过早的优化是万恶之源。     ,
\\S
转义序列匹配所有非空格字符。 因此,您需要的正则表达式如下:
^\\S+$
^\\S.*\\S$
    ,您知道有关正则表达式的说法(现在有两个问题)-如果没有正则表达式,这是可行的,并且应该性能更高且更易于阅读。
string checkString = /* whatever */
if(checkString.IndexOf(\" \") > -1)
   // Failed Condition 1

if(checkString.Trim() != checkString)
   // Failed Condition 2
    ,完全不允许有空格:
^\\S+$
开头或结尾不允许有空格:
^\\S+.*\\S+$
    ,
System.String
类包含您需要的一切: 完全不允许有空格 这只会处理空格:
bool valid = !str.Contains(\" \");
如果您还需要检查选项卡:
char[] naughty = \" \\t\".ToCharArray();
bool fail = (str.IndexOfAny(naughty) == -1);
您还可以检查其他空格字符,有关更多详细信息,请参见字符转义符。 仅在字符串的开头或结尾不允许有空格 更简单一点,因为ѭ10会删除任何形式的空格,包括换行符:
bool valid = str.Length == str.Trim().Length;