2011-05-23 39 views
2

我有一個正則表達式,在ASP.NET頁面路由中用於URL重寫時適用於我。ASP.NET正則表達式問題

但是,當我嘗試在我的ASP.NET代碼中的其他地方使用它時,它會讓我不想要的字符串過去。

我的正則表達式,

[-_a-zA-Z0-9/]+(\.aspx(\?.+)?)? 

這是爲了允許與不帶擴展名或用.aspx文件擴展名的文件/路徑字符串,但不允許文件/路徑具有其他擴展名,如。 「whatever.js」。

我使用它在我的應用程序像這樣的失敗別處......

if (Regex.IsMatch(pageUrl, @"[-_a-zA-Z0-9/]+(\.aspx(\?.+)?)?")) 

看來,作爲字符串的一部分與它匹配讓它通過。但我怎樣才能確保整個字符串(pageUrl)匹配?

+1

嘗試: 「(ASPX(\ +)?。?)^ [-_ A-ZA-Z0-9 /] + $?」'@', '^'表示「行的開始」和「$'」行的末尾「。 – 2011-05-23 06:49:57

回答

5

使用^和$的開始和結束,迫使它使整個字符串:

if (Regex.IsMatch(pageUrl, @"^[-_a-zA-Z0-9/]+(.aspx(\?.+)?)?$")) 

有關詳細信息,請參閱第"Anchors in regular expressions"的MSDN頁面。

+0

成功!非常感謝你。 – John 2011-05-23 06:59:23

0

嘗試這樣

System.Text.RegularExpressions.Regex regexUrl =新System.Text.RegularExpressions.Regex(」 [-_a-ZA-Z0-9 /] +(。ASPX(\?+ ))「)?;

檢查regexUrl.IsMatch(PAGEURL)

+0

我不得不在正則表達式字符串前添加@,對嗎?它沒有工作,和以前一樣。 – John 2011-05-23 06:58:25