web-dev-qa-db-fra.com

Faire correspondre les caractères non imprimables/non ascii et supprimer du texte

Mon JavaScript est assez rouillé, donc toute aide serait la bienvenue. Je dois détecter les caractères non imprimables (caractères de contrôle tels que SOH, BS, etc.) ainsi que les caractères ascii étendus tels que Ž dans une chaîne et les supprimer, mais je ne sais pas comment écrire le code?

Quelqu'un peut-il me diriger dans la bonne direction pour savoir comment s'y prendre? C'est ce que j'ai jusqu'ici:

$(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");
     }

    });
});
19
Grant Doole

Pour cibler des caractères ne faisant pas partie de la plage imprimable de base ASCII, vous pouvez utiliser cette expression rationnelle simple:

[^ -~]+

Explication: dans les 128 premiers caractères du tableau ASCII , la plage imprimable commence par le caractère espace et se termine par un tilde. Ce sont les personnages que vous souhaitez conserver. Cette plage est exprimée avec [ -~] et les caractères qui ne sont pas dans cette plage sont exprimés avec [^ -~]. Ce sont ceux que nous voulons remplacer. Donc:

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

Pas besoin de tester, vous pouvez traiter directement le contenu de la zone de texte:

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

où la plage \x20-\x7E couvre la partie imprimable de la table ascii.

Exemple avec votre code:

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

Vous devez affecter un modèle (au lieu de chaîne) dans la variable isNonAscii, puis utiliser test() pour vérifier s'il correspond. test() renvoie true ou 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");
        }
    });
});

Vérifier jsFiddle

1
kosmos