Rimuovi tutti i caratteri speciali tranne lo spazio da una stringa utilizzando JavaScript


157

Voglio rimuovere tutti i caratteri speciali tranne lo spazio da una stringa utilizzando JavaScript.

Ad esempio, abc's test#s dovrebbe essere visualizzato come abcs tests.


3
Come si definisce il carattere speciale?
Keith Irwin,

Risposte:


349

Dovresti usare la funzione di sostituzione della stringa, con una sola regex. Supponendo caratteri speciali, intendi tutto ciò che non è lettera, ecco una soluzione:

const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));


5
Per utilizzare questa soluzione su alfabeto non latino si prega di questa risposta out
Efkan

Questo rimuoverà anche i caratteri numerici!
tech_geek,

15
@tech_geek puoi farestr.replace(/[^a-zA-Z0-9]/g, "")
Chidi Williams il

2
In realtà hai bisogno di questo str.replace(/[^a-zA-Z0-9 ]/g, "");avviso c'è uno spazio tra 0-9 e]
Ammar Shah

Ha bisogno di qualche modifica, non ha rimosso / o - caratteri e il primo carattere di camelCase dovrebbe essere in minuscolo, ma questo in maiuscolo.
Sansun,

133

Puoi farlo specificando i caratteri che desideri rimuovere:

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

In alternativa, per cambiare tutti i caratteri tranne i numeri e le lettere, prova:

string = string.replace(/[^a-zA-Z0-9]/g, '');

4
cosa succede se non desidero rimuovere lo spazio usando questo? /[^a-zA-Z0-9]/g
aadi1295,

8
@ArbazAbid per mantenere lo spazio basta aggiungerlo ai caratteri bianchi elencati. il tuo regex sarebbe "/ [^ a-zA-Z0-9] / g" (nota gli spazi bianchi dopo le 9)
Crhistian Ramirez,

1
Questa è stata la risposta che ha funzionato, se è necessario uno spazio.
Nathan,

questo sostituisce ()e whitespacesnella stringa.text().replace(/[ ()]/g, '')
C Alonso C Ortega

30

La prima soluzione non funziona per nessun alfabeto UTF-8. (Taglia il testo come Привіт). Sono riuscito a creare una funzione che non utilizza RegExp e utilizzare un 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<lower.length; ++i) {
        if(lower[i] != upper[i] || lower[i].trim() === '')
            res += str[i];
    }
    return res;
}

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

Aggiornamento 2: sono arrivato alla soluzione originale mentre stavo lavorando a una ricerca fuzzy. Se stai anche cercando di rimuovere caratteri speciali per implementare la funzionalità di ricerca, c'è un approccio migliore. Usa qualsiasi libreria di traslitterazione che ti produrrà una stringa solo da caratteri latini e quindi il semplice Regexp farà tutta la magia della rimozione di caratteri speciali. (Funzionerà anche per il cinese e riceverai anche vantaggi collaterali facendo Tromsø== Tromso).


Grazie per questa soluzione abbastanza creativa. È molto più in linea con il funzionamento delle lingue, dal momento che molti di noi non considerano i caratteri speciali "Привіт" o "æøå". La maggior parte delle soluzioni disponibili ritaglia qualsiasi personaggio che non faccia parte dell'alfabeto inglese.
Alex Langberg,

1
Quasi la risposta perfetta per me, ma sfortunatamente considera i caratteri cinesi come caratteri speciali.
Eric Majerus,

@EricMajerus e anche hindi
programmatore

Fai attenzione, questo considera anche i numeri come caratteri speciali.
just_user

11

Non conosco JavaScript, ma non è possibile utilizzare regex?

Qualcosa del genere [^\w\d\s]corrisponderà a tutto tranne che a cifre, caratteri e spazi bianchi. Sarebbe solo una domanda per trovare la sintassi in JavaScript.


1
stackoverflow.com/a/4374890/2384606 Questa è la risposta alla tua domanda :)
Carmela,

8

Ho provato la soluzione molto creativa di Seagul, ma ho scoperto che trattava i numeri anche come personaggi speciali, che non soddisfacevano le mie esigenze. Quindi ecco la mia (non sicura) modifica della soluzione di Seagul ...

//return true if char is a number
function isNumber (text) {
  if(text) {
    var reg = new RegExp('[0-9]+$');
    return reg.test(text);
  }
  return false;
}

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

Hai dimenticato di dichiarare regnella tua prima funzione.
Noman Ali,

6

cerca tutto non (caratteri di parola || spazio):

str.replace(/[^\w ]/, '')

1

Prova a usare questo

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

qui ^ carati è per negazione \ w per [a-zA-Z0-9_] caratteri di parole e \ s per spazio / [] / gi per globale


0

punto (.) non può essere considerato speciale. Ho aggiunto una condizione OR alla risposta di Mozfet e Seagull:

function isNumber (text) {
      reg = new RegExp('[0-9]+$');
      if(text) {
        return reg.test(text);
      }
      return false;
    }

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

0

const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # 
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) ==  '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');


console.log(replaceString.match(/(?<=->).*?(?=<-)/g));


-11

I caratteri speciali che si desidera rimuovere da una stringa, prepararne un elenco e quindi la funzione di sostituzione javascript dell'utente per rimuovere tutti i caratteri speciali.

var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));

oppure puoi eseguire un ciclo per un'intera stringa e confrontare un singolo carattere con il codice ASCII e rigenerare una nuova stringa.


9
No, per favore non farlo. È davvero terribilmente lento. È molto, molto meglio usare un'espressione regolare.
Keith Irwin,

Questa soluzione è molto utile per sostituire un solo personaggio. Nel mio caso è stato utile, grazie.
Vahid Najafi,

Invece di utilizzare il metodo di sostituzione molte volte, si prega di usarlo una sola volta usando espressioni regolari.
FAISAL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.