Supprimer les caractères non-ascii dans le string
var str="INFO] :谷���新道, ひば���ヶ丘2丁���, ひばりヶ���, 東久留米市 (Higashikurume)";
et j'ai besoin de supprimer tous les caractères non-ascii de la chaîne,
signifie str seulement contenir "INFO] (Higashikurume)";
Vous devez vous connecter pour publier un commentaire.
ASCII est dans la plage de 0 à 127, donc:
Il peut également être fait avec une affirmation positive de retrait, comme ceci:
Il utilise unicode. En Javascript, pour exprimer l'unicode pour une expression régulière, les personnages sont spécifiés avec la séquence d'échappement
\u{xxxx}
mais aussi le drapeau'u'
doit présenter; à noter que le regex a des drapeaux'gu'
.J'ai appelé cela une "affirmation positive de retrait" dans le sens où un "positif" de l'assertion exprime lequel des caractères à supprimer, alors qu'un "négatif" de l'assertion exprime laquelle les lettres pour ne pas supprimer. Dans de nombreux contextes, l'assertion négative, comme indiqué dans l'avant des réponses, peut-être plus évocateur pour le lecteur. L'accent circonflexe "
^
", dit "non" et la gamme\x00-\x7F
dit "ascii", alors les deux ensemble dire "non ascii."C'est une excellente solution pour l'anglais des locuteurs de la langue qui ne se soucient que de la langue anglaise, et c'est aussi une amende de réponse pour la question d'origine. Mais dans un contexte plus général, on ne peut pas toujours accepter le biais culturel de supposer que "tous les non-ascii est mauvais." Pour les contextes où la non-ascii est utilisé, mais de temps en temps besoin d'être dépouillé, l'affirmation positive de l'Unicode est un meilleur ajustement.
Une bonne indication de largeur nulle, les caractères non imprimables sont intégrés dans une chaîne est la chaîne de la "longueur" de la propriété est positif (différente de zéro), mais ressemble (c'est à dire les imprimés) une chaîne vide. Par exemple, j'ai eu cette montrant dans le Chrome débogueur, pour une variable nommée "textContent":
Ce qui m'a poussé à vouloir voir ce qui était dans cette chaîne.
Cette séquence d'octets semble être dans la famille de certains caractères Unicode qui s'insérés par les traitements de texte dans les documents, et ensuite trouver leur chemin dans les champs de données. Le plus souvent, ces symboles se produire à la fin d'un document. Le zéro de la largeur de l'espace
"%E2%80%8B"
peut être inséré par CK-Éditeur (CKEditor).Quelques références sur ceux:
http://www.fileformat.info/info/unicode/char/200B/index.htm
https://en.wikipedia.org/wiki/Left-to-right_mark
Noter que, bien que le codage de l'embedded caractère UTF-8, l'encodage dans l'expression régulière n'est pas. Bien que le caractère est incorporé dans la chaîne comme trois octets (dans mon cas) de l'UTF-8, les instructions dans l'expression régulière doit utiliser les deux octets Unicode. En fait, l'UTF-8 peut être jusqu'à quatre octets de long; il est moins compact que le format Unicode, car il utilise le binaire élevé (ou de bits) pour échapper à la norme de codage ascii. C'est expliqué ici:
https://en.wikipedia.org/wiki/UTF-8
textContent = textContent.replace(/[\u{0080}-\u{FFFF}]/gu,"");
ne fonctionne pas sous IE (au moins IE 11). Il échoue avec l'erreur: SCRIPT5021: plage non Valide dans le jeu de caractèresVous pouvez utiliser les regex pour remplacer les caractères non-ASCII
Cependant, notez que les espaces, deux-points et les virgules sont tous valides ASCII, donc le résultat sera
[]
signifie n'importe quel caractère, mais dans[^]
dire le contraire - correspond à tout caractère qui n'est pas dans les crochets.À utiliser ASCII avec des accents:
Aucune de ces réponses gérer correctement les tabulations, retours à la ligne, retour chariot, et certains ne gèrent pas étendu ASCII et unicode.
Cela permettra de GARDER un oeil & retours à la ligne, mais supprimer les caractères de contrôle et tout ce qui sort de l'ASCII ensemble. Cliquez sur "Exécuter cet extrait de code" bouton de test. Il y a quelques nouveaux javascript en viennent donc à l'avenir (2020+?) vous pourriez avoir à faire
\u{FFFFF}
mais pas encoreJS: