2011-07-02 23 views

risposta

165

È necessario utilizzare la funzione di sostituzione stringa, con una singola espressione regolare. Assumendo da caratteri speciali, vuoi dire qualcosa che non sia la lettera, ecco una soluzione:

var str = "abc's test#s"; 
alert(str.replace(/[^a-zA-Z ]/g, "")); 
+30

Questo non funzionerà con parole non inglesi come "Термінатор" – Seagull

+2

Per utilizzare questa soluzione su caratteri non latini, si prega di controllare [questa risposta] (https://stackoverflow.com/a/150078/3765109) out – efkan

-6

Di caratteri speciali che si desidera rimuovere da una stringa, preparare un elenco di essi e quindi la funzione di sostituzione javascript utente per rimuovere tutti i caratteri speciali.

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

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

+6

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

+0

Questa soluzione è molto bella per la sostituzione di un solo carattere. Nel mio caso è stato utile, grazie. –

5

Non so JavaScript, ma non è possibile utilizzare espressioni regolari?

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

+0

http: // StackOverflow.it/a/4374890/2384606 Questa è la risposta alla tua domanda :) – Carmela

54

Puoi farlo specificando i caratteri che si desidera rimuovere:

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

In alternativa, per cambiare tutti i caratteri ad eccezione di numeri e lettere, provare:

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

e se non volessi rimuovere lo spazio usando questo? '/ [^ a-zA-Z0-9]/g' –

+0

@ArbazAbid per mantenere lo spazio basta aggiungerlo ai caratteri bianchi elencati. la tua espressione regolare sarebbe "/ [^ a-zA-Z0-9]/g" (avviso spazi dopo 9) –

20

La prima soluzione non funziona per qualsiasi alfabeto UTF-8. (Sarà tagliato testo come Привіт). Sono riuscito a creare funzioni che non utilizzano RegExp e utilizzano il buon supporto UTF-8 nel motore JavaScript. L'idea è semplice se il simbolo è uguale in maiuscolo e minuscolo è 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; 
} 
+0

Grazie per questa soluzione abbastanza creativa. È molto più in linea con il modo in cui le lingue effettivamente funzionano, dal momento che molti di noi non considerano i personaggi speciali "Привіт" o "æøå". La maggior parte delle soluzioni là fuori taglia qualsiasi personaggio che non fa parte dell'alfabeto inglese. –

+1

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

+0

@EricMajerus e anche hindi – programmer

8

ho cercato soluzione molto creativo di Seagul, ma dicono che è trattata numeri anche come caratteri speciali, che non soddisfare le mie esigenze. Quindi ecco il mio (sicuro) tweak 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 ''; 
} 
+0

Hai dimenticato di dichiarare 'reg' nella tua prima funzione. –

0

punto (.) Non può essere considerato speciale. Ho aggiunto una condizione OR per & risposta di Seagull di Mozfet:

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 ''; 
} 
1

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

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