web-dev-qa-db-fra.com

Supprimer les caractères d'espace de largeur nulle d'une chaîne JavaScript

Je prends l'entrée utilisateur (code JS) et je l'exécute (le traite) en temps réel pour afficher une sortie.

Parfois, le code a un espace de largeur nulle, c'est vraiment bizarre. je ne sais pas comment les utilisateurs saisissent cela. Exemple - "(​$".length === 3

J'ai besoin de pouvoir supprimer ce caractère de mon code dans JS. Comment dois-je procéder? ou peut-être existe-t-il une autre manière d'exécuter ce code JS afin que le navigateur ne prenne pas en compte les caractères d'espace de largeur nulle?

53
user1437328

Unicode a les caractères de largeur nulle suivants:

  • Espace de largeur nulle U + 200B
  • Point de code Unicode sans jointure U + 200C de largeur nulle
  • Joiner de largeur nulle U + 200D Point de code Unicode
  • U + FEFF espace zéro sans interruption point de code Unicode

Pour les supprimer d'une chaîne en JavaScript, vous pouvez utiliser une expression régulière simple:

var userInput = 'a\u200Bb\u200Cc\u200Dd\uFEFFe';
console.log(userInput.length); // 9
var result = userInput.replace(/[\u200B-\u200D\uFEFF]/g, '');
console.log(result.length); // 5

Notez qu'il existe de nombreux autres symboles qui peuvent ne pas être visibles. Certains caractères de contrôle ASCII , par exemple.

89
Mathias Bynens

J'ai eu un problème avec certains caractères invisibles qui corrompaient mon JSON et provoquaient une exception de jeton ILLEGAL inattendue qui plantait mon site.

Voici ma solution en utilisant la variable RegExp:

    var re = new RegExp("\u2028|\u2029");
    var result = text.replace(re, '');

Plus d'informations sur Javascript et les espaces de largeur nulle, vous pouvez trouver ici: Espaces de largeur zéro

8
Technotronic
str.replace(/\u200B/g,'');

200B est l'hexadécimal de l'espace de largeur nulle 8203. remplacez-le par une chaîne vide pour le supprimer

3
[].filter.call( str, function( c ) {
    return c.charCodeAt( 0 ) !== 8203;
} );

Filtrez chaque caractère pour supprimer le code de caractère 8203 (numéro unicode d'espace de largeur nulle).

1
Florian Margaine