2013-08-26 49 views
0

此正則表達式驗證包含屬性的HTML標記是否有人可以將此代碼更正爲在C#RegularExpression中工作。這個表達式的問題是它在第一個引號停止的引號,因爲它是表達式的一部分,沒有人知道如何解決這個問題,或者沒有人有替代方案。 PS沒有人知道一個C#.NET正則表達式的網站,以測試他們的表情RegularExpression DataAnnotation來驗證Html標記

下面是代碼:

[RegularExpression(@"</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)/?>")] 

這是驗證輸出加雙引號TH表達

data-val-regex-pattern="&lt;/?\w+((\s+\w+(\s*=\s*(?:&quot;.*?&quot;|&#39;.*?&#39;|[^&#39;&quot;>\s]+))?)+\s*|\s*)/?>" 
+0

您可以在[Regex Hero](regexhero.net/tester)測試C#正則表達式。另一方面,通過驗證HTML標籤,接受什麼和不接受什麼,你能展示一些示例輸入嗎? –

+0

爲了測試.NET中的正則表達式以及大多數其他快速和骯髒的任務,我通常使用[LINQPad](http://www.linqpad.net/)。 –

+0

我想測試由div標記包圍的圖像映射 – ONYX

回答

1

這聽起來像你的問題是字符串文字不能編譯爲有效的C#。當使用逐字字符串文字(以@開頭的字符串文字)時,您可以簡單地加倍"字符,即""。你的代碼應該是這樣的:

[RegularExpression(@"</?\w+((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>")] 

進一步閱讀

不過,我建議你稍微調整的格局,這樣的:

[RegularExpression(@"</?\w+((\s+\w+(\s*=\s*(?:""[^""]*""|'[^']*'|[^'"">\s]+))?)+\s*|\s*)/?>")] 

哪個是真的y表示模式:

</?\w+((\s+\w+(\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s]+))?)+\s*|\s*)/?> 

如果這種模式後來被轉換爲HTML它會是這個樣子:

&lt;/?\w+((\s+\w+(\s*=\s*(?:&quot;[^&quot;]*&quot;|&#39;[^&#39;]*&#39;|[^&#39;&quot;>\s]+))?)+\s*|\s*)/?> 
  • &lt;表示一個編碼<字符
  • &quot;表示一個編碼"字符
  • &#39;表示編碼的'字符
+0

現在表達式不起作用它在javascript中測試過 – ONYX

+0

我沒有更改表達式,我只是簡單地將它轉義爲C#。這兩個引號實際上代表一個單一的(轉義)報價。在LINQPad中試用。 –

+0

這是驗證我的頁面數據的輸出-val-regex-pattern =「< /?\ w +((\ s + \ w +(\ s * = \ s *(?: "。*?" | '。 *?' | [^ ' "> \ s] +))?)+ \ s * | \ s *)/?>「 – ONYX