2011-07-02 9 views

Odpowiedz

165

Powinieneś użyć funkcji zamiany ciągu, z jednym wyrażeniem regularnym. Zakładając przez znaki specjalne, to znaczy, że nic nie jest list, oto rozwiązanie:

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

To nie zadziała dla słów nieangielskojęzycznych, takich jak "Термінатор" – Seagull

+2

Aby użyć tego rozwiązania na alfabetach innych niż łaciński, zaznacz [tę odpowiedź] (https://stackoverflow.com/a/150078/3765109) pod adresem – efkan

-6

Które znaki specjalne chcesz usunąć z ciągu znaków, przygotuj ich listę, a następnie funkcję javascript replace, aby usunąć wszystkie znaki specjalne.

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

lub można uruchomić pętlę przez cały ciąg i porównać jeden pojedynczy znak z kodem ASCII i zregenerować nowy łańcuch.

+6

Nie, nie rób tego. Jest naprawdę strasznie powolny. Znacznie lepiej jest używać wyrażenia regularnego. –

+0

To rozwiązanie jest bardzo dobre dla zastąpienia tylko jednego znaku. W moim przypadku było to pomocne, dzięki. –

5

nie wiem JavaScript, ale nie jest to możliwe przy użyciu regex?

Coś takiego jak [^\w\d\s] będzie pasowało do niczego oprócz cyfr, znaków i białych znaków. Byłoby tylko pytanie, aby znaleźć składnię w JavaScript.

+0

http: //przepełnienie stosu.com/a/4374890/2384606 To jest odpowiedź na twoje pytanie :) – Carmela

54

Można to zrobić podając znaki, które chcesz usunąć:

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

Alternatywnie, aby zmienić wszystkie znaki oprócz liter i cyfr, spróbuj:

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

co, jeśli nie chcę usunąć miejsca za pomocą tego? '/ [^ a-zA-Z0-9]/g' –

+0

@AbbazAby zachować miejsce, po prostu dodaj to do białych znaków na liście. twoje wyrażenie to "/ [^ a-zA-Z0-9]/g" (zauważ spację po 9) –

20

Pierwsze rozwiązanie nie działa dowolny alfabet UTF-8. (Wytnie tekst, taki jak Привіт). Udało mi się stworzyć funkcję, która nie używa RegExp i używa dobrej obsługi UTF-8 w silniku JavaScript. Pomysł jest prosty, jeśli symbol jest równy wielkiem i małemu, to jest znak specjalny. Jedyny wyjątek dotyczy białych znaków.

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

Dziękuję za to dość kreatywne rozwiązanie. Jest to dużo bardziej zgodne z tym, jak faktycznie działają języki, ponieważ wielu z nas nie uważa znaków specjalnych "Привіт" lub "æøå". Większość rozwiązań wycina każdą postać, która nie jest częścią alfabetu angielskiego. –

+1

Prawie idealna odpowiedź dla mnie, ale niestety uważa chińskie znaki za znaki specjalne. –

+0

@EricMajerus and hindi too – programmer

8

Próbowałem bardzo twórcze rozwiązanie Seagul, ale okazało się, że numery traktowane również jako znaki specjalne, które nie pasował do moich potrzeb. Więc tutaj jest mój (failsafe) Tweak roztworu Seagul za ...

//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

Zapomniałeś zadeklarować 'reg' w swojej pierwszej funkcji. –

0

kropka (.) Nie mogą być uznane za wyjątkowe. Dodałem warunek LUB odpowiedź do & Mewa Mozfet za:

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

wyszukiwanie nie wszystko (znaki słów || spacja):

str.replace(/[^\w ]/, '') 
Powiązane problemy