2011-04-18 65 views
1

我正在寻找一个正则表达式,它将在文本中匹配字符串## test ##。字符串可以由任何单词或非单词字符,或空格或换行符围绕 - 因此无论如何,所有内容都可以是字符串的左侧和右侧。 我需要在ValidationExpression的asp.net RegularExpressionValidator控件中使用它。正则表达式 - 无论包围的词是什么

在此先感谢您的帮助! 此致敬礼。

<asp:RegularExpressionValidator ID="RegularExpressionValidator9" runat="server" ControlToValidate="TextBox1" 
      Display="Dynamic" ValidationGroup="Mail" ErrorMessage="Insert !" 
      ValidationExpression="(\w|\s|\n)##test##(\w|\s|\n)" >*</asp:RegularExpressionValidator> 
     <asp:Button ID="Button1" runat="server" Text="Button" 
      ValidationGroup="Mail" Onclick="Button1_Click" /> 
+4

你真的应该发布你已经尝试过的东西,你的代码,除了需求列表之外的任何东西。这不是一个自由职业网站。 – austinbv 2011-04-18 22:40:55

+0

只需将字符串“### test ###”与模式'/ ### test ### /'相匹配,然后完成。 – tchrist 2011-04-19 02:25:03

+0

@tchrist:他说在他匹配的位之前或之后可能有其他文字。但验证器隐式地将匹配定位在两端,所以他必须“填充”正则表达式来匹配那些东西。他可能不关心文本的其余部分,但他仍然需要消耗它。 – 2011-04-19 04:57:33

回答

3

这应做到:

ValidationExpression="[\s\S]*##test##[\s\S]*" 

我可以看到三个问题与您正则表达式,都不必做(\w|\s|\n)部分:

  • 它将匹配一个字符。你需要它匹配零个或多个字符;量化器加上*即可。

  • 这是不必要的冗余和无偿低效。 [\w\s]匹配相同的东西:单词字符(\w)或空白字符(\s,其中已包含\n)。而且,无论何时在使用和改变((a|b|c))或角色等级([abc])之间进行选择,角色等级都应始终是第一个达到的工具。它可能看起来像一个微不足道的选择,但它可以对性能有巨大的影响。

  • 它留下了很多人物,最值得注意的是标点符号像!+.等。

如果你想知道为什么我用[\s\S]*,而不是.*,这是因为可以在浏览器服务器上执行验证。在JavaScript正则表达式中,与其他大多数风格一样,.元字符与换行符不匹配。其他大多数人也支持“单行”或“点匹配全部”模式,但不支持JavaScript。

当然,你可以可以只强制它在服务器上运行,但你可能习惯于把你的正则表达式减少到JavaScript的水平,当你可以。 : -/

+0

+1或更简单,只是:'ValidationExpression =“## test ##”' – ridgerunner 2011-04-19 02:28:42

+0

我不这么认为。在@ John的回答下看到我的评论。 – 2011-04-19 05:03:38

+0

非常好的解释感谢。这真是有用。我也用过(。| \ s)* ## test ##(。| \ s)*但是你正是我所需要的。 – John 2011-04-19 20:52:22

0

是这样的吗?

.*(##test##).* 
+0

不完全。点字符在出现在字符类中时失去其特殊含义,因此'[\ r \ n。]'匹配回车符,换行符或点。 – 2011-04-19 05:01:25

+1

@Alan Moore:好的一点,我会删除那个位置和你的+1来得到很好的解释。 – Town 2011-04-19 10:02:25

+0

感谢您的回答。 – John 2011-04-19 20:57:52