Je vérifiais la bibliothèque de gâteau et trouvé une expression régulière pour la date dans son fichier Validation.php. Je l'ai utilisé contre diverses valeurs de date et trouvé qu'il correspond même à des valeurs de date erronées pour certaines dates spécifiques.La date de cakephp expression régulière correspond à la mauvaise date
Par exemple, elle correspond parfaitement contre les dates suivantes (qui, en fait, il devrait): -
20/01/2011
19/09/2017
20/01/1601
Mais quand j'utilise une valeur de date mal avec 29 et/ou 30 comme date, puis étonnamment il leur correspond aussi (qui il ne devrait pas): -
30/,/1601
29/,/2017
https://regex101.com/r/8Q96bd/1/
Une autre chose intéressante est, si vous changez la date et utilisez une autre date, sauf 30 et 29, alors l'expression ne correspond pas.
Utilisez toute autre date, sauf 29 & 30 et il ne correspond pas: -
28/,/1600
https://regex101.com/r/UKuPWU/1/
Alors pourquoi l'expression regex date de la terre CakePHP correspond à une valeur de date incorrecte si elle contient 30 & 29 comme date?
est ici l'expression: -
^(?:(?:(?:31(\\\/|-|\\.|\\x20))(?:0?[13578]|1[02]))\1|(?:(?:29|30)([-\/])(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29([-\/])0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])([-\/])(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
Vous pouvez trouver cette expression dans le répertoire lib CakePHP (je suis en utilisant 2.x gâteau bien).
\lib\Cake\Utility\Validation.php (check out its date function)
Mes doutes sont suivants: -
1. Pourquoi est-ce qui permet par des virgules en place du mois seulement pour 29 & 30?
2. pourquoi il a utilisé x20 dans l'expression régulière? Quel est le besoin de l'utiliser dans une expression DATE?
3. Y a-t-il une date/règle/spécification qui me manque, ce qui permet d'utiliser 29 & 30 sans mentionner le mois?
Quelqu'un pourrait-il aider à comprendre la logique derrière toutes ces choses?
Ne voyez-vous pas la virgule dans '[1,3-9]'? C'est pourquoi la virgule est appariée. –
Je l'ai compris mais j'essayais de comprendre POURQUOI cakephp utiliserait une virgule en premier lieu si d'autres devaient l'enlever plus tard? –
C'est une erreur. Il y a beaucoup de bibliothèques avec regex, et j'ai vu ces inexactitudes (et d'autres) en eux. Il est courant. Il y a des fautes de frappe dans les documentations (hier, il y avait une question Django). Il y a un site qui dit que vous pouvez utiliser '[A-z]' pour faire correspondre toutes les lettres ASCII, mais en fait, [c'est faux] (http://stackoverflow.com/a/29771926/3832970). –