我正在使用umbraco字段的驗證由正則表達式完成。在一個字段中,我想讓用戶使用富文本編輯器(tinymce)設置文本的樣式,但我仍然想限制它們可以輸入的字符數。正則表達式驗證長度字符串,不包括html標記
我目前使用這個正則表達式,但它檢查字符的總數,所以包括html。
^[\s\S]{0,250}$
是否有一個正則表達式不會計算html標記中的字符。
我正在使用umbraco字段的驗證由正則表達式完成。在一個字段中,我想讓用戶使用富文本編輯器(tinymce)設置文本的樣式,但我仍然想限制它們可以輸入的字符數。正則表達式驗證長度字符串,不包括html標記
我目前使用這個正則表達式,但它檢查字符的總數,所以包括html。
^[\s\S]{0,250}$
是否有一個正則表達式不會計算html標記中的字符。
簡短的回答是否定的。至少,沒有任何理智的正則表達式,沒有一個先進的正則表達式引擎,允許遞歸或平衡組,也許根本沒有。可以識別並忽略HTML標記的正則表達式必須解析HTML做到這一點,並down that road lies madness.
但是,你可以使用某種形式的預處理,如jQuery在客戶端或別的東西上服務器端,解析HTML並在之前剝去標籤,然後應用長度驗證。
您確定要這麼做嗎?如果您將樣式化的輸入存儲在數據庫中,那麼這些HTML標記將與您的列大小相同,就像其他所有內容一樣。如果將這些數據存儲在varchar(250)列中,則必須將這些HTML標記計數爲250的一部分,否則將它們除去並丟失所有樣式信息。
因爲您試圖檢測的文法是
而不是
上下文無關,所以一步完成這將很難(幾乎不可能)。兩步很簡單;只需要首先執行s/<.+?>//
替換以移除所有標籤,然後再次計數。
在相關說明上,你的正則表達式有點傻。您可以使用.
字符來表示任何字符;你不必做你正在使用的「空白或非空白」技巧。
^.{0,250}$
'[\ S \ s]'技巧無疑用來匹配'\ n'字符。除非多線模式打開,'.'不會匹配換行符。此外,[HTML是上下文無](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1758162#1758162),這實際上是問題。上下文無關文法比較複雜。 –
也可能值得一提的是,有有效的HTML會打破這個正則表達式。 ''
@Justin:...在JavaScript中,沒有多行模式,因此'[\ s \ S]'是「任何字符,甚至是換行符」的常用成語。 –
該限制是因爲它適合於具有設定高度的盒子。 – suzyb
好的。在這種情況下,我建議使用jQuery或類似的東西來代替正則表達式。你可以用這種方式正確地解析HTML,你甚至可以設置一個onkeyup事件來檢查這個盒子是否已滿。或者,如果這是您的選擇,您可以將該框擴展。 –
無論哪種方式,使用正則表達式來做到這一點的問題是相同的。 –