2009-08-06 16 views
8

Mój JS zapisuje niektóre ciągi danych do JSON za pomocą "stringify()", ale obserwując wyjściowy ciąg JSON widzę wiele dziwnych znaków (poza keyspace), takich jak NULL i inne złe znaki. Teraz nie mam listy tych "złych" znaków, więc jak mogę je usunąć z moich danych string?Jak usunąć złe znaki z ciągu znaków w JS?

+1

Co powoduje te dziwne postacie? Lepiej byłoby zbadać główną przyczynę i tam ją naprawić. –

Odpowiedz

8

byłoby miło, gdyby nie było proste regex, ale nie sądzę, że jest. Z tego co rozumiem, nadal chcesz zezwolić na znaki takie jak% $ # @, itp., Ale chcesz uniemożliwić inne dziwne znaki takie jak tabulatory i wartości null. Jeśli to prawda, uważam, że najprostszym sposobem byłoby pętli każdy znak i oceniać kod char ...

function stripCrap(val) { 
    var result = ''; 

    for(var i = 0, l = val.length; i < l; i++) { 
    var s = val[i]; 
    if(String.toCharCode(s) > 31) 
     result += s; 
    } 

    return result; 
} 

Jeśli naprawdę chcesz, aby użyć wyrażenia regularnego, biała lista podejście wydaje się konieczne. Umożliwi to dostęp do wszystkich cyfr, liter i spacji ...

val = val.replace(/[^a-z 0-9]+/gi,''); 
+0

dzięki bardzo za sugestię białej listy. Tak wspaniałe rozwiązanie tego problemu – Mansiemans

+0

Otrzymuję błąd: 'TypeError: Funkcja Object String() {[kod macierzysty]} nie ma metody 'toCharCode'' w chrome – nnyby

+0

Mam to działa, po prostu zmień linię na: 'if (s.charCodeAt (0)> 31) {' – nnyby

2

Jeśli masz listę „dobrych” znaków można utworzyć regex który dopasowuje dowolny znak nie w swoim liście, a rozebrać wszystko pasuje - przykładowo, następujące regex pasuje coś nie litery „a”, „q” lub „z”:

/[^aqz]+/ig 
Powiązane problemy