Maison >interface Web >js tutoriel >Pourquoi mon expression régulière d'attribut de modèle HTML génère-t-elle une erreur « Caractère invalide dans la classe de caractères » ?

Pourquoi mon expression régulière d'attribut de modèle HTML génère-t-elle une erreur « Caractère invalide dans la classe de caractères » ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 05:03:02947parcourir

Why is my HTML Pattern Attribute Regex Throwing a

Problèmes liés aux attributs de modèle : résolution de la validité avec des expressions régulières en HTML

Lors de l'utilisation de l'attribut de motif en HTML, vous pouvez rencontrer une erreur lors de la spécification un modèle d'expression régulière qui fonctionne avec le drapeau « u » mais pas avec le drapeau « v ». Cet article examine le problème et propose une solution.

Le problème

Lorsque vous travaillez avec l'attribut pattern en HTML, vous pouvez rencontrer l'avertissement de console suivant :

Pattern attribute value ^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$ is valid with the RegExp u flag, but not with the v flag:
Uncaught SyntaxError: Invalid regular expression: /^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/v: Invalid character in character class.

Explication

L'indicateur 'v', introduit dans ECMAScript 2018, est automatiquement appliqué lors de la compilation d'un objet RegExp à utiliser dans l'attribut pattern des éléments HTML. Cela signifie que le modèle fourni est converti en expression régulière avec l'indicateur « v » activé.

L'indicateur « v » applique des restrictions supplémentaires sur les règles d'échappement. Contrairement à l'indicateur « u », l'indicateur « v » interdit de laisser le « - » littéral sans échappement à la fin d'une classe de caractères. En effet, l'indicateur « v » prend en charge la soustraction et l'intersection de classes de caractères, ce qui peut entrer en conflit avec un « - » non échappé.

Résolution

Pour résoudre ce problème, assurez-vous que le « - » à la fin des classes de caractères est échappé lors de l'utilisation de l'indicateur « v ». Par exemple, la version corrigée du modèle serait :

^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$

Notes supplémentaires

  • Lors de l'utilisation du drapeau 'u', il n'y a aucune restriction en échappant au caractère '-'.
  • L'erreur générée lors de l'utilisation d'un modèle non valide avec l'indicateur 'v' est utile pour le débogage.
  • L'indicateur 'v' peut être explicitement spécifié lors de la création un objet RegExp, mais son utilisation est déconseillée lorsque l'on cible des navigateurs plus anciens qui ne le prennent pas en charge.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn