在正则表达式.NET中禁止空格



我试图验证具有最多3个小数位数的数字。

我的正则表达是 ^ d ([。,] d {1,3})?$

我忽略了语言的文化差异(文化变化属性是正确的),这就是为什么我在表达中添加了一个'''。

我尝试了以下测试:

  1. 1000(输入:正确;结果:传递)
  2. 0,(输入:不正确;结果:失败)
  3. 1.111(输入:正确;结果:传递)
  4. 空格(输入:不正确;结果:传递)

即使使用 ^和$符号,它也允许用户输入空格,并且不会显示我的验证错误。

怎么了?

更新:

以下是我的aspx文件中的代码:

<td>
<asp:TextBox ID="txtBuildingSize" CssClass="textbox" runat="server" 
 ToolTip="in Sq Ft" meta:resourcekey="txtBuildingSizeResource1"></asp:TextBox>
<asp:Label ID="lblSqM1" runat="server" CssClass="optionLabel" 
meta:resourcekey="lblSqM1Resource1" Text="square meters"></asp:Label>
</td>
<td>
<asp:RegularExpressionValidator ID="strBuildingSizeValidator" 
  ControlToValidate="txtBuildingSize" Display="Dynamic"
  runat="server" ForeColor="Red" ValidationExpression="^d+([.,]d{1,3})?$" 
  meta:resourcekey="strBuildingSizeValidatorResource1" 
  Text="* Max 3 decimals only"></asp:RegularExpressionValidator>

更新2:我尝试再次测试它。正则表达式正常。它不允许以形式提交输入,直到我从文本框中清除空格为止。现在,唯一的问题是它尝试输入空格时不会显示验证错误。

已解决: ^ d ([。,] d {1,3} {0,0})?$

(space){0,0}做到了。出现错误消息。

您的表达似乎正确。我确实进行了测试以检查:

代码:

var pattern = @"^d+([.,]d{1,3})?$";
var examples = new string[] { "1000", "0", "1.111", "1 1" };
var regEx = new Regex(pattern, RegexOptions.IgnoreCase);
foreach(var ex in examples)
{
    var match = regEx.Match(ex);
    if(match.Success)
        Console.WriteLine("Input: '"+ ex + "'; result: Passed");
    else
        Console.WriteLine("Input: '"+ ex + "'; result: Failed");
}

输出:

输入:'1000';结果:通过

输入:'0';结果:通过

输入:'1.111';结果:通过

输入:'1 1';结果:失败

输入:'';结果:失败

也许还有其他原因是什么?

更新:

我什至在像这样的WPF文本框中的文本变换事件中对此进行了测试:

var pattern = @"^d+([.,]d{1,3})?$";
var regEx = new Regex(pattern, RegexOptions.IgnoreCase);
SearchTextBox.TextChanged += (o, e) => 
{
    var match = regEx.Match(SearchTextBox.Text);
    SearchTextBox.Background = match.Success ? Green : Red;
}

从我输入一个空间的那一刻起,文本框变成红色。

最新更新