我正在尝试验证最多包含3位小数的数字。
我的正则表达式是^ \ d +([。,] \ d {1,3})?$
我忽略了语言中的文化差异(CultureInvariant属性为真),这就是为什么我在表达式中添加了','。
我尝试了以下测试:
即使使用^和$符号,它也允许用户输入空格并且不显示我的验证错误。
出了什么问题?
更新:
以下是我在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}成功了。出现错误消息。
答案 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;
}
从我输入空格的那一刻起,文本框变为红色。