$regexLogin = "(^[a-z]+\.{0,1}[a-z]*[0-9]{0,2}$)"
Elle marche nickel mais je voudrais pouvoir exclure une demande de login type: "michel." (finissant par un ".")
C'est vrai qu'elle, comme telle, permet un point à la fin. Pour l'exclure, vous pouvez ajouter un simple "lookbehind" négatif à la fin (voir dessous).
...serait il plus prudent de remplacer les "[a-z]+" et "[a-z]*" par des "[a-z]{1,24}" et "[a-z]{0,24}" par exemple? (niveau sécurité)
Je ne pense pas qu'il est souhaitable de le faire comme ça. Il dégrade la performance d'une regex sans une nécessité accablante. Je dirais plutôt mettre un "lookahead" négatif au début dans le sens que la longeur du texte plus long qu'un maximum (dit, par exemple, 30 - voir dessous) serait invalidée. Le nombre concret n'a pas d'importance critique pour provisionner un minimum de protection à la bdd.
En somme, modifiant la regex comme ça pour la completer avec ces deux buts supplémentaires.
$regexLogin="/^(?![\s\S]{30,})[a-z]+\.{0,1}[a-z]*[0-9]{0,2}(?<!\.)$/";
Partager