web-dev-qa-db-ja.com

非印刷可能/非ASCII文字に一致し、テキストから削除します

私のJavaScriptは非常に錆びているので、これに関するどんな助けも素晴らしいでしょう。非印刷文字(SOH、BSなどの制御文字)および文字列内のasなどの拡張ASCII文字を検出して削除する必要がありますが、コードの書き方がわかりませんか?

誰も私にこれを行う方法の正しい方向を示すことができますか?これは私がこれまでに持っているものです:

$(document).ready(function() {
    $('.jsTextArea').blur(function() {
        var pattern = /[^\000-\031]+/gi;
        var val = $(this).val();
        if (pattern.test(val)) {    
        for (var i = 0; i < val.length; i++) {
            var res = val.charAt([i]);
                alert("Character " + [i] + " " + res);              
        }          
    }
    else {
         alert("It failed");
     }

    });
});
20
Grant Doole

印刷可能な基本ASCII範囲の一部ではない文字をターゲットにするには、この単純な正規表現を使用できます。

[^ -~]+

説明: ASCIIテーブル の最初の128文字では、印刷可能な範囲はスペース文字で始まり、チルダで終わります。これらはあなたが保持したいキャラクターです。その範囲は[ -~]で表され、その範囲にない文字は[^ -~]で表されます。これらは私たちが置き換えたいものです。したがって:

result = string.replace(/[^ -~]+/g, "");
46
zx81

テストする必要はありません。テキストボックスのコンテンツを直接処理できます。

textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, '');

ここで、範囲\x20-\x7Eは、asciiテーブルの印刷可能な部分をカバーします。

コードの例:

$('.jsTextArea').blur(function() {
    this.value = this.value.replace(/[^\x20-\x7E]+/g, '');
});
33

(文字列ではなく)パターンをisNonAscii変数に割り当ててから、test()を使用して一致するかどうかを確認する必要があります。 test()はtrueまたはfalseを返します。

$(document).ready(function() {
    $('.jsTextArea').blur(function() {
        var pattern = /[^\000-\031]+/gi;
        var val = $(this).val();
        if (pattern.test(val)) {
            alert("It matched");
        }
        else {
            alert("It did NOT match");
        }
    });
});

チェック jsFiddle

1
kosmos