Application de la longueur des caractères dans les expressions régulières
Les expressions régulières nécessitent souvent des restrictions de longueur. Sans eux, une expression régulière correspondra à des chaînes de n'importe quelle longueur. Bien que les quantificateurs semblent être la solution (par exemple {1,15}
), ils ne fonctionnent pas directement sur la chaîne entière. En effet, les quantificateurs n'affectent que l'élément immédiatement précédent.
Par exemple, cette tentative échoue :
<code class="language-javascript">var test = /^(a-z|A-Z|0-9)*[^$%^&*;:,?()""']*${1,15}/ // Error!</code>
La solution Lookahead
L'approche correcte utilise une assertion prospective positive :
<code class="language-javascript">^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,?()""']*$</code>
Comprendre le Lookahead
(?=.{1,15}$)
est la clé. Cette anticipation positive affirme que la chaîne entière (du début ^
à la fin $
) contient entre 1 et 15 caractères (.{1,15}
). Il ne consomme aucun personnage ; il vérifie seulement l'état. Le reste de l'expression régulière [a-zA-Z0-9]*[^$%^&*;:,?()""']*$
correspond ensuite aux caractères autorisés dans cette contrainte de longueur.
Gestion des nouvelles lignes
Si vos chaînes peuvent inclure des caractères de nouvelle ligne, utilisez une classe de caractères plus robuste pour faire correspondre n'importe quel caractère, y compris les nouvelles lignes :
<code class="language-javascript">^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,?()""']*$</code>
[sS]
correspond à n’importe quel caractère espace ou non. Cela garantit que la vérification de la longueur fonctionne correctement même avec une entrée multiligne. Cela fournit une méthode fiable pour appliquer les limites de longueur de caractères dans les expressions régulières.
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!