Expression régulière (Regex)
Aperçu
Les expressions régulières de Content Management API (CMA) permettent la correspondance de modèles à l’aide du moteur d’expressions régulières RE2.
Auparavant, nous utilisions le moteur d’expressions régulières JavaScript. Depuis le 21 avril 2025, nous utilisons le moteur d’expression RE2 pour améliorer la sécurité, les performances et la maintenabilité, en appliquant une évaluation plus stricte des expressions régulières.
Les principaux avantages du moteur d’expressions régulières RE2 sont les suivants :
Élimination du backtracking catastrophique : le moteur RegExp de JavaScript permet des modèles complexes qui peuvent conduire à un temps d’exécution exponentiel (attaques ReDoS). RE2 prévient ces problèmes en appliquant des règles plus strictes.
Meilleures performances et efficacité : RE2 s’exécute dans une complexité temporelle linéaire, garantissant que les évaluations des expressions régulières n’ont pas d’impact sur les performances du système.
Amélioration de la sécurité : en interdisant certains modèles comme les backreferences (rétro-références) et les quantificateurs imbriqués, RE2 réduit les risques liés aux regex mal construites.
Cohérence et prévisibilité : contrairement à RegExp de JavaScript, RE2 fournit un comportement de correspondance plus déterministe qui empêche les comportements inattendus dus à un backtracking excessif.
Indicateurs pris en charge
Indicateur | Description |
|---|---|
| Correspondance insensible à la casse |
| Correspondance multi-lignes (affecte |
| Le point ( |
| Prise en charge d’Unicode |
Fonctionnalités non prises en charge
Les fonctionnalités suivantes ne sont plus prises en charge :
Indicateur global (« g ») : RE2 ne prend pas en charge l’indicateur « g ». Les utilisateurs doivent donc itérer manuellement sur les correspondances.
Important : même si RE2 ne prend pas en charge l’indicateur global (
g), il est ignoré dans l’exécution et accepté comme indicateur autorisé dans la validation.Lookaheads et Lookbehinds : les assertions Lookahead (« (?=...) ») et lookbehind (« (?(<=...) ») ne sont pas disponibles dans RE2.
Backréférences : les backréférences (’\1’, ’\2’, etc.) ne sont pas prises en charge dans RE2.
Les quantificateurs imbriqués sont limités : les modèles avec des quantificateurs imbriqués (’(a+)+’) ne sont plus acceptés.
L’indicateur global (g) n’est pas pris en charge et sera ignoré pendant l’exécution. Comment puis-je le remplacer ?
JavaScript permet à l’indicateur global (g) de trouver plusieurs correspondances, mais RE2JS ne le prend pas en charge.
Solution :
Comme nos contrôles regex testent 0 contre 1 ou plusieurs correspondances, la suppression de l’indicateur
gdevrait être sûre et n’aura pas d’impact sur la règle de validation du client.
Important : aucune erreur ne sera générée lorsqu’un indicateur
gest défini. Cependant, nous ne le prendrons pas en compte lors de l’exécution de la regex à l’étape de validation.
Comment corriger une regex à l’aide de lookaheads ou de lookbehinds ?
Si vous utilisiez des look behinds (<code>(?<=...)</code> ou <code>(?<!…)</code>), vous devez réécrire votre regex sans eux.
Exemple de correction :
Avant (RegExp JavaScript, non valide dans RE2) | Après (version compatible RE2) |
|---|---|
|
|
Que dois-je faire si ma regex utilise des backréférences (\1, \2, etc.) ?
Au lieu d’utiliser \1, appliquez la logique de validation au niveau de l’application.
Exemple de correction :
Avant (RegExp JavaScript, non valide dans RE2) | Après (version compatible RE2) |
|---|---|
|
|
Comment gérer les quantificateurs imbriqués ?
Les quantificateurs imbriqués ((a+)+) peuvent causer des problèmes de performances et ne sont pas pris en charge dans RE2JS.
Exemple de correction :
Avant (RegExp JavaScript, non valide dans RE2) | Après (version compatible RE2) |
|---|---|
|
|
Exemples de validation à l’aide de RE2
Validation d’e-mail
| Allowed values | Disallowed values |
| name@domain.com | special%char@domain.com |
| 1-2.3_4@domain.com | name@domain |
| name@sub.domain.com | notanemail.com |
Regex compatible RE2
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
Validation d’URL
| Allowed values | Disallowed values |
| http://foo.com/food_food | special%char@domain.com |
| http://userid:password@example.com:8080 | name@domain |
Regex compatible RE2
^https?:\/\/[^\s/$.?#].[^\s]*$
Validation de numéro de téléphone américain
| Allowed values | Disallowed values |
| 1-123-456-7890 | 1_111-111-1111 |
| 1-123.555 1111 | 12345 |
| 18001114545 | 1-111-1a1-1111 |
Regex compatible RE2
^1[-.\s]?(\d{3})[-.\s]?(\d{3})[-.\s]?(\d{4})$
Comment tester votre regex
Nous vous recommandons d’utiliser RE2JS Playground pour valider et tester vos expressions régulières pour la compatibilité RE2.
Si vous avez des questions ou si vous avez besoin d’aide, contactez notre équipe d’assistance.