質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework 2

Zend Framework 2は、PHP 5.3以上に対応している MVCフレームワークとコンポーネントライブラリーの集合です。

Q&A

解決済

1回答

622閲覧

ZendFamework3での日付時刻のバリデーションについて

hashikun54

総合スコア26

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework 2

Zend Framework 2は、PHP 5.3以上に対応している MVCフレームワークとコンポーネントライブラリーの集合です。

0グッド

1クリップ

投稿2018/09/21 07:15

編集2022/01/12 10:55

いい方法がありましたらご教示いただけますでしょうか。
日付日時のバリデータクラスとしてZend\Validator\DateZend\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両方のバリデータを使えば良さそうなんですが、それ以外に『単独でまともにバリデートができる』クラスってないものでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ValidatorChainを試してください。

投稿2018/09/22 13:15

JinwonKim

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hashikun54

2018/09/25 07:43

回答ありがとうござます。 ValidatorChainにZend\Validator\DateとZend\I18n\Validator\Datetimeをそれぞれセットして両方のバリデートを行うということですよね つまり『単独で書式・値共にバリデートができるクラス』はZendFramework3では提供されていないということでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問