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]*[^$%^&*;:,<>?()""']*$
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!