Maison >interface Web >js tutoriel >Comment restreindre la longueur d'entrée dans les expressions régulières à l'aide d'anticipations ?

Comment restreindre la longueur d'entrée dans les expressions régulières à l'aide d'anticipations ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-22 16:00:27234parcourir

How to Restrict Input Length in Regular Expressions Using Lookaheads?

Restriction de la longueur d'entrée dans les expressions régulières

Les expressions régulières offrent un moyen puissant de faire correspondre des modèles dans le texte, et il est souvent nécessaire de restreindre la longueur de caractères correspondants. Bien que cela puisse paraître simple, il peut s’avérer difficile d’appliquer correctement les quantificateurs. Dans cet article, nous explorerons pourquoi limiter les quantificateurs à la fin d'un modèle ne fonctionne pas et proposerons une approche alternative utilisant les anticipations.

Considérez l'expression régulière suivante :

/(a-z|A-Z|0-9)*[^$%^&*;:,<>?()""']*$/

Cette expression correspond à une séquence de lettres, de chiffres et d'autres caractères, mais elle ne limite pas la longueur totale de la chaîne d'entrée. Pour limiter les caractères à 15, nous pourrions essayer :

/(a-z|A-Z|0-9)*[^$%^&*;:,<>?()""']*${1,15}/

Cependant, cela entraînera une erreur. La raison en est que les quantificateurs s'appliquent au sous-modèle immédiatement à leur gauche, et non à l'ensemble du modèle. Dans ce cas, le quantificateur {1,15} s'applique à la deuxième classe de caractères, limitant sa longueur à 1 à 15 caractères, mais pas la longueur totale de la chaîne.

Au lieu de cela, la bonne façon de restreindre la longueur d'entrée est d'utiliser une anticipation ancrée au début de la chaîne :

^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()""']*$
  • L'ancre ^ correspond au début de la chaîne string.
  • L'anticipation positive (?=.{1,15}$) vérifie s'il y a 1 à 15 caractères avant la fin de la chaîne ($).
  • La classe de caractères restante correspond aux lettres, aux chiffres et aux autres caractères autorisés.

Cette analyse anticipée garantit que la chaîne entière d'entrée correspond à la longueur souhaitée restriction.

Remarque : Les Lookaheads sont des assertions de largeur nulle qui ne consomment aucun caractère. Ils renvoient uniquement vrai ou faux en fonction du modèle suivant.

Dans les cas où l'entrée peut contenir des nouvelles lignes, vous pouvez utiliser la classe de caractères portable [sS] pour faire correspondre n'importe quel caractère, y compris les nouvelles lignes :

^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()""']*$

En utilisant des analyses anticipées, nous pouvons restreindre efficacement la longueur de la chaîne d'entrée tout en conservant le comportement de correspondance de modèle souhaité.

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