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
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!