【问题标题】:Disallow whitespace in regular expression .NET禁止正则表达式.NET中的空格
【发布时间】:2014-01-31 01:57:12
【问题描述】:

我正在尝试验证最多包含 3 个十进制数字的数字。

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

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

我尝试了以下测试:

  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} 成功了。出现错误消息。

【问题讨论】:

  • 该正则表达式似乎有效,不应允许空格。你确定你是在空白输入的情况下触发它吗?调试和检查。
  • 我使用了单个空格字符。然后我尝试按住空格键,但在任何情况下它都没有尝试拍摄验证错误。我尝试使用 javascript 代码禁用空格键,它似乎有效。但是我很好奇为什么正则表达式(启用了javascript)仍然不起作用。
  • 那么您的客户端 JS 有问题吗?
  • 我猜是的。即使我将浏览器更改为 Mozilla Firefox,我也没有得到适当的结果。
  • 你的表达是正确的。看来你对你的Regex表达式的application的理解是不正确的。

标签: .net regex decimal whitespace


【解决方案1】:

你的表达似乎是正确的。我做了以下测试来检查:

代码:

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

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

【讨论】:

  • 非常感谢您验证我的表达。我也很疑惑。我在 Visual Studio 2010 中使用 ASP.NET (4.0) VB。我的浏览器是 Google Chrome。我也尝试使用 Mozilla Firefox,但它仍然允许空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 2011-02-20
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
相关资源
最近更新 更多