W3docs

Comprendre Unicode en JavaScript : drapeaux et classes

Apprenez le drapeau regex "u" de JavaScript pour gérer les points de code et paires de substitution, ainsi que les échappements de propriétés Unicode \p{...} et \P{...} pour lettres, chiffres, scripts et emoji.

Introduction à Unicode

JavaScript prend en charge Unicode, un standard d'encodage de caractères permettant de représenter du texte provenant de multiples langues et scripts. Unicode est essentiel pour développer des applications internationalisées et gérer efficacement des données textuelles variées. Dans ce chapitre, nous allons explorer les drapeaux et les classes Unicode en JavaScript, en examinant leur utilisation et en fournissant des exemples pratiques pour approfondir votre compréhension.

Le drapeau Unicode u

Le drapeau u active la correspondance Unicode complète dans les expressions régulières. Par défaut, une regex traite une string comme une séquence d'unités de code UTF-16. Les caractères en dehors du Plan multilingue de base (BMP) — emoji, nombreux symboles mathématiques et scripts rares — sont stockés sous forme de paire de substitution : deux unités de code qui encodent ensemble un seul point de code. Sans le drapeau u, le moteur regex voit ces deux moitiés séparément, ce qui perturbe ., les plages de caractères et les quantificateurs pour ces caractères.

Avec le drapeau u activé, le moteur travaille en termes de points de code plutôt que d'unités de code, ainsi un seul caractère astral compte comme un seul caractère.

Paires de substitution et pourquoi le drapeau est important

. correspond à un seul caractère. Sans u, il ne correspond qu'à une seule unité de code et ne peut donc pas correspondre à un caractère astral complet à lui seul.

javascript— editable

😀 est la paire de substitution pour 😀. String#length renvoie 2 car elle compte les unités de code, tandis que la décomposition de la string en tableau (qui itère par point de code) renvoie 1. Sans u, /^.$/ échoue parce que . ne correspond qu'à l'une des deux moitiés ; avec u, il correspond au caractère complet.

Utilisation du drapeau u

javascript— editable

Ici, 👍 est l'emoji pouce levé. Sans le drapeau u, la regex a.b ne peut pas correspondre car . ne consomme qu'une moitié de la paire de substitution. Avec le drapeau u, . consomme le point de code entier, et le motif correspond.

Compter les caractères correctement

Une regex avec le drapeau u et le drapeau g permet d'itérer sur les vrais caractères, y compris les caractères astraux.

javascript— editable

Combiner le drapeau u avec d'autres drapeaux

Le drapeau u se compose avec les autres drapeaux. Cet exemple ajoute le global (g) et l'insensibilité à la casse (i).

javascript— editable

Cet exemple illustre la combinaison du drapeau u avec les drapeaux global (g) et insensible à la casse (i). La regex correspond correctement à A👍b, montrant comment le drapeau u peut être utilisé avec d'autres drapeaux pour une correspondance plus flexible.

Échappements de propriétés Unicode : \p{...} et \P{...}

Les échappements de propriétés Unicode offrent un moyen de faire correspondre des caractères en fonction de leurs propriétés Unicode. Cette fonctionnalité, introduite dans ECMAScript 2018, facilite le travail avec des types de caractères spécifiques.

Syntaxe des échappements de propriétés Unicode

  • \p{Property=Value} : Correspond aux caractères ayant la propriété spécifiée.
  • \P{Property=Value} : Correspond aux caractères n'ayant pas la propriété spécifiée.

Propriétés Unicode courantes

Pour les catégories générales à une seule lettre, vous pouvez écrire le nom de la propriété directement : \p{L} est l'abréviation de \p{General_Category=Letter}.

  1. Catégorie générale : Correspond aux caractères en fonction de leur catégorie générale.
    • \p{L} (Letter) : Correspond à n'importe quelle lettre, dans n'importe quel script.
    • \p{N} (Number) : Correspond à n'importe quel caractère numérique.
    • \p{P} (Punctuation) : Correspond à la ponctuation.
    • \p{Lu} / \p{Ll} : Lettres majuscules / minuscules.
  2. Script : Correspond aux caractères appartenant à un système d'écriture.
    • \p{Script=Greek} (ou \p{sc=Greek}) : Caractères grecs.
    • \p{Script=Han} : Caractères Han (chinois, japonais, coréen).
    • \p{Script=Cyrillic} : Caractères cyrilliques.
  3. Propriétés binaires : Correspondent aux caractères possédant un trait donné.
    • \p{Emoji}, \p{Emoji_Presentation} : Caractères emoji.
    • \p{White_Space} : Espaces blancs.

La forme majuscule \P{...} est la négation — elle correspond à tout caractère qui ne possède pas la propriété. Pour une couverture plus approfondie de la forme entre crochets [...], voir character classes.

Exemples d'échappements de propriétés Unicode

javascript— editable

Ici, \p{L} correspond à n'importe quelle lettre. La regex \p{L}+ trouve toutes les séquences de lettres dans la string 'Hello123', renvoyant ["Hello"].

javascript— editable

Dans cet exemple, \p{N} correspond à n'importe quel chiffre. La regex \p{N}+ extrait toutes les séquences numériques de la string 'Hello123', produisant ["123"].

javascript— editable

\P{L} est l'inverse de \p{L}, donc \P{L}+ capture les séquences ne contenant aucune lettre — ici "123!".

javascript— editable

Cet exemple utilise \p{Script=Greek} pour correspondre aux caractères grecs. La regex correspond avec succès à la string grecque 'αβγδε'.

Correspondance des emoji

Étant donné que \p{...} requiert u, il gère également correctement les emoji astraux — chaque emoji est traité comme un seul caractère.

javascript— editable
Avertissement

L'utilisation des échappements de propriétés Unicode peut affecter les performances, notamment avec de grandes quantités de données textuelles. Optimisez vos expressions régulières et testez leurs performances dans votre cas d'utilisation spécifique.

Applications pratiques

Validation des saisies utilisateur

Les échappements de propriétés Unicode permettent de valider les saisies utilisateur avec plus de précision, en s'assurant que seuls les caractères autorisés sont acceptés.

javascript— editable

Cette regex garantit qu'un nom d'utilisateur valide commence par au moins deux lettres, suivies de toute combinaison de lettres et de chiffres. 'User123' passe la validation, tandis que '123User' ne la passe pas.

Extraction de caractères spécifiques

Vous pouvez extraire des types de caractères spécifiques d'une string à l'aide des échappements de propriétés Unicode.

javascript— editable

Dans cet exemple, \p{L}+ correspond à toutes les séquences de lettres dans la string 'Hello, κόσμε!', renvoyant ["Hello", "κόσμε"].

Info

Utilisez toujours le drapeau u avec les échappements de propriétés Unicode

Lorsque vous utilisez des échappements de propriétés Unicode, activez toujours le drapeau u pour garantir une correspondance correcte. Sans ce drapeau, les échappements de propriétés lèveront une SyntaxError.

javascript— editable

Conclusion

Comprendre et utiliser Unicode en JavaScript est essentiel pour développer des applications robustes et internationalisées. En exploitant le drapeau u et les échappements de propriétés Unicode, vous pouvez gérer des données textuelles variées plus efficacement et effectuer des correspondances de caractères précises. Intégrez ces techniques dans vos projets pour en améliorer les fonctionnalités et vous assurer qu'ils répondent aux standards mondiaux.

Pratique

Pratique
Que modifie le drapeau 'u' dans les expressions régulières JavaScript ?
Que modifie le drapeau 'u' dans les expressions régulières JavaScript ?
Was this page helpful?