[英]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
選擇一個不是code
、 em
ul
或br
帶有查詢字符串的元素:
*: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.