いい方法がありましたらご教示いただけますでしょうか。
日付日時のバリデータクラスとしてZend\Validator\Date
、Zend\I18n\Validator\Datetime
を見つけましたが、
php
1/* Zend\Validator\Date */ 2$validator = new \Zend\Validator\Date(); 3$validator->setOptions(['format'=>'Y-m']); 4var_dump($validator->isValid('2018-99'));//true 5 6$validator->setOptions(['format'=>'m-d H:i']); 7var_dump($validator->isValid('2018-09-99'));//false 8 9$validator->setOptions(['format'=>'m-d H:i']); 10var_dump($validator->isValid('09-99 23:59'));//true 11````date_create_from_format()`に渡して、`DateTime::getLastErrors()`でエラー・警告がなければtrueを返す仕様らしいのですが、そもそも`date_create_from_format()`自体が不正時に必ずWarningを出す挙動ではないため、値のバリデートができない。 12 13 14```php 15/* Zend\I18n\Validator\Datetime */ 16$validator = new \Zend\I18n\Validator\DateTime(); 17 18$validator->setOptions(['pattern'=>'yyyy-MM']); 19var_dump($validator->isValid('2018-09-99 99:99:99'));//true 20```patternで『前方一致で』マッチさせ、マッチした箇所だけ値の妥当性チェックを行う仕様 21このためpatternにマッチするより長い文字列なら通ってしまい、余った部分は何を書いていても良いという。 22 23Githubのコミット履歴を追ってみたところ、元々はpatternでマッチさせたあと、完全一致であることを判定するロジックが載っていたのですが、マルチバイト文字がある場合に正しく動作せず、4年ほど前に報告された後、修正せずに取っ払ってしまったようです。 24 25 26両方のバリデータを使えば良さそうなんですが、それ以外に『単独でまともにバリデートができる』クラスってないものでしょうか?

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/25 07:43