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.
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à:
[^èéòàùì\w\s]
. \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….,;`^"<>'}+:?®©]*$