2009-08-06 2 views
8

My JSは "stringify()"を使用してJSONにいくつかの文字列データを保存しますが、出力されたJSON文字列を観察すると、NULLやその他の不正な文字のような奇妙な文字が表示されます。今私はこれらの "悪い"文字のリストを持っていないので、私はそれらを文字列データから取り除くことができますか?あなたは「良い」文字のリストを持っている場合は、あなたのリストにないを任意の文字にマッチする正規表現を作成し、それが一致するものを取り除くことができJS内の文字列から不正な文字を取り除くにはどうすればよいですか?

+1

これらの変な文字の原因は何ですか?根本原因を調査し、根本原因を修正する方が良いでしょう。 –

答えて

8

単純なRegExがあればうれしいですが、私はそこにいるとは思いません。私が理解しているところでは、%$#@などの文字を許可したいが、タブやヌルのような他の奇妙な文字は許可しない。これが正しければ、私はあなたが本当に正規表現を使用する場合は、ホワイトリストのアプローチが必要であると考えられる

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

...最も簡単な方法は、ループにそれぞれの文字になります信じて、文字コードを評価します。これは、すべての数字、文字、スペースを許可します...

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

ホワイトリストの提案に感謝します。この問題のこのような大きな解決策 – Mansiemans

+0

エラーが発生しました: 'TypeError:Object function String(){[ネイティブコード]}にはクロムのメソッド 'toCharCode'がありません – nnyby

+0

私はそれを働かせました。妥当な文字セット(標準の句読点を含む)を得るためにはかなり長いリストになる可能性がありますが、Unicodeを気にしなければ、これは良いことになるかもしれません。(例:s.charCodeAt(0)> 31){' – nnyby

2

- 例えば、次の正規表現は何もない文字と一致します"a"、 "q"、または "z":

/[^aqz]+/ig 
関連する問題