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
Libérer: 2024-10-28 05:03:02
original
968 Les gens l'ont consulté

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.
Copier après la connexion

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]+$
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal