为啥我的正则表达式在 ASP.NET 中不起作用

Posted

技术标签:

【中文标题】为啥我的正则表达式在 ASP.NET 中不起作用【英文标题】:Why is my Regular Expression not work in ASP.NET为什么我的正则表达式在 ASP.NET 中不起作用 【发布时间】:2012-11-17 13:42:57 【问题描述】:

我想使用RegularExpressionValidator 表示这种形式的日期 yyyy-mm-dd(例如:2012-11-29),这是我的表达方式:

/^(19[789]\d|20[0123]\d)-(0\d|1[012]|\d)-(31|30|[012]\d|\d)$ /

我在 http://www.quanetic.com/Regex 上对其进行了测试,它可以工作,但如果我在我的 asp.net 应用程序中这样做,它就无法工作

 <tr>
   <td>Gültig ab:</td>
   <td><asp:TextBox ID="txtVon" runat="server" ></asp:TextBox></td>  
   <td><asp:ImageButton ID="imgVon" runat="server" ImageUrl="images/Calender.ico" Width="15" Height="15" />
     <asp:CalendarExtender runat="server" ID="E_Von" TargetControlID="txtVon" Format="yyyy-MM-dd" PopupButtonID="imgVon"/></td>        
   <td>
     <asp:RequiredFieldValidator ID="ValVon" 
       runat="server" ForeColor="red" 
       ErrorMessage="*" ControlToValidate="txtVon"></asp:RequiredFieldValidator>
     <asp:RegularExpressionValidator ID="regVon"   
       runat="server" ControlToValidate="txtVon" 
       ErrorMessage="*Format" ForeColor="red" 
       ValidationExpression="/^(19[789]\d|20[0123]\d)\-(0\d|1[012]|\d)\-(31|30|[012]\d|\d)$/"></asp:RegularExpressionValidator>
   </td>
 </tr>

错误在哪里?

【问题讨论】:

怎么不工作了?是根本没有触发,还是在错误的时间触发? 即使表达式已用 og Grand 的答案 ***.com/a/13626639/736079 固定,但可以通过使用 CompareValidator 验证内容的数据类型来找到问题的真正解决方案。见***.com/a/939852/736079 【参考方案1】:

只需删除字符串开头和 and 中的字符“/”。

你将拥有

ValidationExpression="^(19[789]\d|20[0123]\d)-(0\d|1[012]|\d)-(31|30|[012]\d|\d)$"

【讨论】:

/regex/ 语法是 Regexp 对象的 javascript 语法,但此表达式在客户端 (javascript) 和服务器端 (C# 或 VB.NET) 之间共享,因此不应使用任何特定于语言的构造. 你写的东西——虚幻的。 我试图澄清为什么你的答案是正确的答案。我不知道您的评论是为了恭维,还是作为在我的评论中标记错误的声明......【参考方案2】:

我用下面的,没问题。

\A(?:^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$)\Z

【讨论】:

这有相反的问题:\A\Z 在 JavaScript 中不受支持,因此如果在客户端完成验证,则会失败。但无论如何它们都是多余的,因为正则表达式已经与 ^$ 锚定。

以上是关于为啥我的正则表达式在 ASP.NET 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 `\d` 在 sed 的正则表达式中不起作用? [复制]

为啥非贪心量词有时在 Oracle 正则表达式中不起作用?

为啥加号运算符在 JavaScript 的正则表达式中不起作用? [复制]

为啥 jQuery 验证函数在 ASP.NET MVC Core 应用程序中不起作用?

模态在我的网络服务器中不起作用,但在 localhost 中起作用。这是为啥?

我的正则表达式在 C# 中不起作用