cakeのライブラリをチェックしていて、Validation.phpファイルに日付の正規表現があります。私はさまざまな日付の値に対してそれを使用し、特定の日付の間違った日付の値と一致することさえ発見しました。cakephpの日付正規表現が間違った日付と一致する
例えば、それは次の日付に対して完全に一致する(実際にはこれは、それがなければならない): -
20/01/2011
19/09/2017
20/01/1601
しかし、私は日付として29および/または30で間違った日付の値を使用し、そして驚くべきことには、(それがいけないをた)あまりにもそれらを一致します -
30/,/1601
29/,/2017
https://regex101.com/r/8Q96bd/1/
さらに興味深いのは、日付を変更して30と29以外の別の日付を使用すると、式が一致しないことです。
は29 & 30以外の任意の他の日付を使用して、それはそれと一致していません: - それは含まれている場合
28/,/1600
https://regex101.com/r/UKuPWU/1/
なぜ地球CakePHPの日付の正規表現式には、誤った日付値と一致しました30 & 29として?ここで
は式である: -^(?:(?:(?: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})$
あなたは(私もケーキ2.xのを使用しています)CakePHPのlibディレクトリ内でこの表現を見つけることができます。
\lib\Cake\Utility\Validation.php (check out its date function)
私の疑問は、以下のとおりである: -
1.それが唯一の29 コンマ月の代わりにすることができているのはなぜ?
2.なぜそれが正規表現でX20を使用していましたか? DATE式でそれを使用する必要はありますか?
3. 30月を言及せずに使用することができる任意の日付の標準/ルール/仕様がありますか?
誰もがこれらのすべての背後にある論理を理解するのに助けてください。
カンマは '[1,3-9]'にありませんか?それがカンマがマッチする理由です。 –
私は理解していましたが、他の人が後で削除する必要がある場合、cakephpが最初にコンマを使用する理由を理解しようとしていましたか? –
間違いです。正規表現を持つライブラリがたくさんありますが、私はそのような(およびその他の)不正確さを見てきました。それは一般的です。ドキュメントにはタイプミスがあります(昨日、Djangoの質問がありました)。あなたは '[A-Z]'を使ってすべてのASCII文字にマッチすると言っているサイトがありますが、実際は間違っています(http://stackoverflow.com/a/29771926/3832970)。 –