Comment supprimer les caractères UTF-8 invalides d'une chaîne JavaScript?

Je voudrais supprimer toutes les invalides de caractères UTF-8 à partir d'une chaîne de caractères en JavaScript. J'ai essayé avec ce code JavaScript:

strTest = strTest.replace(/([\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})|./g, "$1");

Il semble que l'UTF-8 validation regex décrit ici (lien supprimé) plus complète, et j'ai adapté la même manière, comme:

strTest = strTest.replace(/([\x09\x0A\x0D\x20-\x7E]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})|./g, "$1");

Ces deux morceaux de code semble être en permettant à UTF-8 valide, mais ne sont pas filtrant presque tous les mauvais caractères UTF-8 à partir de mes données de test: UTF-8 décodeur capacité et le stress test. Le mauvais caractères sont inchangés ou semblent avoir certains de leurs octets retiré de la création d'un nouveau caractère non valide.

Je ne suis pas très familier avec la norme UTF-8 ou avec multibyte en JavaScript donc je ne suis pas sûr si je ne suis pas pour représenter correcte UTF-8 dans la regex ou si je suis à l'application de cette regex mal en JavaScript.

Edit: ajout de l'indicateur global pour ma regex par Tomalak commentaire - toutefois, cela ne fonctionne toujours pas pour moi. Je suis l'abandon de le faire sur le côté client par bobince commentaire.

source d'informationauteur Matthew Sielski