2011-04-18 33 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