【发布时间】:2012-04-20 15:06:20
【问题描述】:
TextBox 控件的要求是接受以下作为有效输入:
- 一个数字序列。
- 文字字符串“房间数”。
- 根本没有值(留空)。根本不指定值应该允许 RegularExpressionValidator 通过。
以下 RegEx 产生了预期的结果(成功验证了 3 种类型的输入):
"Number of rooms|[0-9]*"
但是,当一位同事询问为什么在指定字符串“房间数”时以下内容无法验证(要求 #2)时,我无法做出解释:
"[0-9]*|Number of rooms"
关于为什么在这种情况下交替的顺序很重要的解释确实非常有见地。
更新:
第二个正则表达式成功匹配控制台应用程序中的目标字符串“房间数”,如here 所示。但是,当输入为“房间数”时,在 aspx 标记中使用相同的表达式不匹配。这是相关的 aspx 标记:
<asp:TextBox runat="server" ID="textbox1" >
</asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
EnableClientScript="false" runat="server" ControlToValidate="textbox1"
ValidationExpression="[0-9]*|Number of rooms"
ErrorMessage="RegularExpressionValidator"></asp:RegularExpressionValidator>
<asp:Button ID="Button1" runat="server" Text="Button" />
【问题讨论】:
-
对于
A sequence of numbers.,您应该使用\d+或[0-9]+,而不是[0-9]*,因为这意味着任何位数(包括无)。 -
在一种情况下,您有“房间数”,而在另一种情况下,您有“行数”。是不是打错字了?
-
@Oded:但是它不会与第 3 项中的空字符串匹配。
-
@MartinLiversage - 它会,因为空字符串根本没有数字。
-
你不需要
^和$来使它成为一个有意义的正则表达式吗?[0-9]*将匹配任何字符串,否则,对吗? (或者验证器是否强制整个字符串匹配?)