PDA

View Full Version : [JAVASCRIPT]Rimuovere tag html da una textarea


computerses89
03-05-2010, 09:15
nel mio sito c'è una area di testo, per permettere ai clienti di inserire delle recensioni riguardo i prodotti che acquistano.
Ora vorrei controllare quello che loro inseriscono, rimuovendo magari tramite jquery o semplice javascript eventuali tag html che potranno inserire.
c'è un modo per farlo?

MaxArt
03-05-2010, 10:56
Sì, un'espressione regolare lunga un chilometro che ti prende tutti i tag HTML:
var mlTagRe = new RegExp("<(?:([a-zA-Z\\?][\\w:\\-]*)(\\s(?:\\s*[a-z][\\w:\\-]*(?:\\s*="
+"(?:\\s*\"(?:\\\\\"|[^\"])*\"|\\s*'(?:\\\\'|[^'])*'|[^\\s>]+))?)*)?(\\s*[\\/\\?]?)|"
+"\\/([a-zA-Z][\\w:\\-]*)\\s*|(!--((?:[^\\-]|-(?!->))*)--)|(!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]))>");
A dire il vero può essere anche usata per gli XML, infatti cattura anche le sezioni CDATA. E pure i commenti. E le direttive <?...?>
Ci ho messo un po' a farla per uso mio personale. Usala liberamente.
Puoi registrare un evento onchange che ti scorra tutto l'input e rimuova i tag.

Sto scrivendo una guida per le regular expression, stay tuned! :)

computerses89
03-05-2010, 11:23
Sì, un'espressione regolare lunga un chilometro che ti prende tutti i tag HTML:
var mlTagRe = new RegExp("<(?:([a-zA-Z\\?][\\w:\\-]*)(\\s(?:\\s*[a-z][\\w:\\-]*(?:\\s*="
+"(?:\\s*\"(?:\\\\\"|[^\"])*\"|\\s*'(?:\\\\'|[^'])*'|[^\\s>]+))?)*)?(\\s*[\\/\\?]?)|"
+"\\/([a-zA-Z][\\w:\\-]*)\\s*|(!--((?:[^\\-]|-(?!->))*)--)|(!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]))>");
A dire il vero può essere anche usata per gli XML, infatti cattura anche le sezioni CDATA. E pure i commenti. E le direttive <?...?>
Ci ho messo un po' a farla per uso mio personale. Usala liberamente.
Puoi registrare un evento onchange che ti scorra tutto l'input e rimuova i tag.

Sto scrivendo una guida per le regular expression, stay tuned! :)

grazie milleee!!!:D :D
un'appunto soltanto:
nell'evento onchange="" cosa metto??

MaxArt
03-05-2010, 11:38
grazie milleee!!!:D :D
un'appunto soltanto:
nell'evento onchange="" cosa metto??Una cosa del tipo togliTag(this), dove togliTag è una funzione che ti serve appunto a togliere i tag - o a sostituirli, se vuoi.
Se vuoi fare qualcosa di "brutale", puoi provare con una cosa del genere:
function togliTag(obj) {
obj.value = obj.value.replace(mlTagRe, "");
}
In questo modo te li toglie vita tutti, senza un controllo, se hai definito mlTagRe con flag globale (cosa che io non ho fatto). Fai attenzione che toglie praticamente qualsiasi cosa che assomigli ad un tag HTML, anche se qualcuno scrive "<ciao>".