Rimuovi tutti i caratteri speciali con RegExp

Vorrei un RegExp che rimuova tutti i caratteri speciali da una stringa. Sto provando qualcosa di simile, ma non funziona in IE7, anche se funziona in Firefox.

var specialChars = "[email protected]#$^&%*()+=-[]\/{}|:?,."; for (var i = 0; i < specialChars.length; i++) { stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), ""); } 

Sarebbe utile anche una descrizione dettagliata di RegExp.

 var desired = stringToReplace.replace(/[^\w\s]/gi, '') 

Come è stato menzionato nei commenti, è più facile farlo come whitelist: sostituisci i caratteri che non si trovano nell’elenco di sicurezza.

Il carattere caret ( ^ ) è la negazione del set [...] , diciamo global e case-insensitive (quest’ultimo è un po ‘ridondante ma volevo menzionarlo) e l’safelist in questo esempio è cifre, caratteri word , underscore ( \w ) e spazi bianchi ( \s ).

Nota che se vuoi ancora escludere un set, inclusi cose come slash e caratteri speciali, puoi fare quanto segue:

 var outString = sourceString.replace(/[`[email protected]#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, ''); 

Prendete nota che, per includere anche il carattere “meno”, è necessario evaderlo con un backslash come quest’ultimo gruppo. se non lo fai, seleziona anche 0-9 che probabilmente non è desiderato.

L’espressione regolare in linguaggio Javascript non gestisce le lettere Unicode .

Non usare [^\w\s] , questo rimuoverà le lettere con accenti (come àèéìòù), per non parlare di cirillico o cinese, le lettere provenienti da tali lingue saranno completate rimosse.

Davvero non vuoi rimuovere queste lettere insieme a tutti i personaggi speciali. Hai due possibilità:

  • Aggiungi alla tua espressione regolare tutti i caratteri speciali che non vuoi rimuovere,
    per esempio: [^èéòàùì\w\s] .
  • Dai un’occhiata a xregexp.com . XRegExp aggiunge il supporto di base per la corrispondenza Unicode tramite la syntax \p{...} .
 var str = "Їжак::: résd,$%& adùf" var search = XRegExp('([^?\\pL ]+)'); var res = XRegExp.replace(str, search, '',"all"); console.log(res); // returns "Їжак::: resd,adf" console.log(str.replace(/[^\w\s]/gi, '') ); // returns " rsd adf" console.log(str.replace(/[^\wèéòàùì\s]/gi, '') ); // returns " résd adùf" 
  

La prima soluzione non funziona con nessun alfabeto UTF-8. (Taglia testo come Їжак). Sono riuscito a creare una funzione che non utilizza RegExp e utilizza il buon supporto UTF-8 nel motore JavaScript. L’idea è semplice se un simbolo è uguale in maiuscolo e minuscolo è un carattere speciale. L’unica eccezione è fatta per gli spazi bianchi.

 function removeSpecials(str) { var lower = str.toLowerCase(); var upper = str.toUpperCase(); var res = ""; for(var i=0; i 

Aggiornamento: Si noti che questa soluzione funziona solo per le lingue in cui sono presenti lettere maiuscole e minuscole. In lingue come il cinese, questo non funzionerà.

Uso RegexBuddy per eseguire le mie regex ha quasi tutte le lingue molto utili. Di copiare / incollare per la lingua di destinazione. Strumento eccezionale e non molto costoso.

Quindi copio / incollato la tua regex e il tuo problema è che [,] sono caratteri speciali nella regex, quindi devi sfuggirli. Quindi la regex dovrebbe essere: /[email protected]#$=&%*()+=-[\x5B\x5D]\/{}|:<>?,./im

perché non fai qualcosa come:

 re = /^[a-z0-9 ]$/i; var isValid = re.test(yourInput); 

per verificare se il tuo input contiene caratteri speciali

str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "") Ho fatto sth in questo modo. Ma c’è qualcuno che lo ha fatto molto più facilmente come str.replace(/\W_/g,"");

usa regex ^[^/\\()[email protected]#$%^&*{«»„““”''|\n\t….,;`^"<>'}+:?®©]*$