Development #42843
Mauvais comportement de la validation par regexp
Début:
13 mai 2020
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
Le code fait ça :
def regex_validation(value): match = re.match(pattern, value) return bool(match and match.group() == value)
sur l'exemple suivant : value = '([0-9]|10)'
ça ne validera jamais la chaîne '10'
parce qu'il y a match partiel sur 1
, la solution moche est d'apprendre aux gens à mettre les matchs les plus long au début ((10|[0-9]
) mais c'est affreux. Plus propre serait d'apprendre aux gens à mettre ^
et $
en début et fin de regexp, ce qu'on ne veut pas parce que c'est idiot, ils veulent toujours faire ça.
Je propose à la place de modifier le code par :
def regex_validation(value): return bool(re.match(r'^(?:%s)$' % pattern, value))
ainsi il sera implicite que les regexps doivent valider du début à la fin de la chaîne et le moteur de regexp se comportera normalement.
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Fichier 0001-misc-make-regexp-validate-whole-strings-42843.patch 0001-misc-make-regexp-validate-whole-strings-42843.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a presque 4 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 531f3804f9aa3c1be787ebac197583d31d9305cd Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Wed May 13 17:30:29 2020 +0200 misc: make regexp validate whole strings (#42843)
Mis à jour par Frédéric Péters il y a presque 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: make regexp validate whole strings (#42843)