禁止使用正则表达式.NET中的空格

时间:2014-01-30 15:13:38

标签: .net regex decimal whitespace

我正在尝试验证最多包含3位小数的数字。

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

我忽略了语言中的文化差异(CultureInvariant属性为真),这就是为什么我在表达式中添加了','。

我尝试了以下测试:

  1. 1000(输入:正确;结果:通过)
  2. 0,(输入:不正确;结果:失败)
  3. 1.111(输入:正确;结果:通过)
  4. 空格(输入:不正确;结果:已通过)
  5. 即使使用^和$符号,它也允许用户输入空格并且不显示我的验证错误。

    出了什么问题?

    更新:

    以下是我在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})?$

    (空格){0,0}成功了。出现错误消息。

1 个答案:

答案 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 TextBox中的TextChanged事件中对此进行了测试,如下所示:

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;
}

从我输入空格的那一刻起,文本框变为红色。