使用RegularExpressionValidator在输入开头允许两种模式之一

时间:2012-01-26 17:42:54

标签: asp.net regex validation asp.net-2.0

我有一个RegularExpressionValidator(ASP.NET 2.0),我用它来确保在文本框中输入的网址与http://正确开始。我使用的是^http://的ValidationExpression。现在我也允许mailto个链接,所以我的表达式为^http://|^mailto:

它适用于regex tester(设置为客户端Javascript引擎),用于输入“http://www.google.com”和“mailto:someone@anymail.net”等输入。但是我的页面上的RegularExpressionValidator不允许任何有效输入。

我尝试了以下变体,所有这些变体都在测试器中工作但没有一个在验证器中工作:

  • (^http://)|(^mailto:)
  • ^(http://)|(mailto:)
  • ^http://|^mailto:
  • ^(http://|mailto:)
  • http://|mailto:
  • ^((http://)|(mailto:))

验证器的声明是这样的:

<asp:RegularExpressionValidator ID="revEditUrl" runat="server"
   ControlToValidate="txtEditUrl" ErrorMessage="Url must begin with 'http://' or 'mailto:'"
   ValidationExpression="^((http://)|(mailto:))" Display="Dynamic"
   ValidationGroup="myGroup" />

我的意图是允许任何以http://或mailto:开头的输入。我在这里做错了什么?

更新:MSDN page on Regular Expressions in ASP.NET说:

  

您不需要指定字符串的开头和字符串匹配字符(^和$)的结尾 - 它们是假设的。如果你添加它们,它不会伤害(或改变)任何东西 - 它根本就没必要。

这是否意味着它假设我的输入中不能包含任何不符合我的正则表达式的内容(即它应该是http://mailto:)?如果是这样,那么为什么^http://的原始模式有效?

2 个答案:

答案 0 :(得分:1)

您必须逃离::和/

另外,我想知道RegularExpressionValidator是否不会自动假设整个字符串匹配并在结尾隐含$。 尝试:

^((http\:\/\/)|(mailto\:))(.+)$

答案 1 :(得分:0)

尝试一次一个地转义每个非字母数字字符,包括parantheses。我想它只是其中之一 - 每个正则表达式实现都有不同的字符,默认情况下是元字符。