簡體   English   中英

正則表達式將 html 標簽列入白名單

[英]Regex to whitelist html tags

我正在嘗試創建一個可以將幾組 html 標簽列入白名單的正則表達式。

/<(\/)?(code|em|ul)(\/)?>$/

但是在少數情況下會失敗:

<em style="padding: 10px">

所以試過/<(\\/)?(code|em|ul)(.|\\n)*?(\\/)?>$/但這也允許

<emadchgasgh style="padding: 10px">

需要加入白名單的案例:

<em> - Success
</em> - Success
<br/> - Success
<em style="asdcasc"> - Success
<emacjhasjdhc> - Failure

問題 -正則表達式中還可以添加什么?

/<\s*\/?\s*(code|em|ul|br)\b.*?>/

\\s*\\/?\\s*標簽名前可能有空格
(code|em|ul|br)\\b只匹配整個標簽名
.*?>匹配所有字符>

在客戶端,使用 DOMParser 將文本解析為文檔,並使用querySelector選擇一個不是codeem ulbr帶有查詢字符串的元素:

*:not(code):not(em):not(ul):not(br)

如果返回任何內容,則字符串不會通過。

 const test = (str) => { const doc = new DOMParser().parseFromString(str, 'text/html'); return !doc.body.querySelector('*:not(code):not(em):not(ul):not(br)'); }; console.log(test('foo <br> bar')); console.log(test('foo <code>code here</code> bar <br>')); console.log(test('foo <div>not allowed</div>'));

在 Java 中,您可以使用Jsoup來解析給定的 HTML 字符串,然后您可以選擇其中的元素,例如:

Document doc = Jsoup.parse(input);
Elements forbiddenElements = doc.select("*:not(code):not(em):not(ul):not(br)");

如果forbiddenElements有任何內容,則該字符串包含禁止元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM