7

日付の正規表現バリデーターを作成しようとしています。私が抱えている問題は、"date"タイプの入力フィールドを使用していることです。これは、Chrome の魅力のように機能します。Chrome ではカレンダーのように開きますが、残りは何もしないので、残りの日付を手動で入力することにしました。

これは私のエラースローメッセージです(YYYY-MM-DD形式を探しています):

$date_regex ='#^(19|20)\d\d[\- /.](0[1-9]|1[012])[\- /.](0[1-9]|[12][0-9]|3[01])$#';
$hiredate = $_POST['hiredate'];
if (!preg_match($date_regex, $hiredate)){
    $errors[] = 'Your hire date entry does not match the YYYY-MM-DD required format.';
}

これには多くの例があることは知っていますが、すでに20ほど試しましたが、解決できませんでした。多分私は何かが足りない。

多少関連する場合、入力フィールドは次のとおりです。

<input type="date" name="hiredate" />
4

3 に答える 3

15

これには正規表現を使用しないでください。次を使用して同じ結果を得ることができますDateTime::createFromFormat

// specify your date's original format, in this example m/d/Y (e.g. 08/31/2013)
$format = "m/d/Y";
$hireDate = DateTime::createFromFormat($format, $_POST['hiredate']);
if(!$hireDate) {
 // createFromFormat returns false if the format is invalid;
} else {
   //change it to any format you want with format() (e.g. 2013-08-31)
   echo $hireDate->format("Y-m-d");
}

ここでもっと読むことができます:

http://php.net/manual/en/datetime.createfromformat.php

ただし、この問題は PHP とはまったく無関係のようです。

PHP はバックエンドで実行されますが、フロントエンドに問題があるようです。

また、使用する入力タイプに問題があるとは思えません。指定した入力タイプが 1 つのブラウザでサポートされていない場合は、デフォルトでテキストになります。ここでそれを参照してください:

http://jsfiddle.net/FKGCA/

私のブラウザは が何であるかを認識していない<input type="whatever" />ため、入力タイプをデフォルトで「テキスト」に設定しています。これらの 4 つの入力をタグでラップする<form action="myForm.php" method="POST"></form>と、サーバーは入力が非表示、ラジオ ボタン、選択、テキスト、またはパスワードであるかどうかを気にしない/認識しないため、ブラウザーは入力をサーバーに送信します。サーバーは生データのみを受信します。

おそらく、問題は PHP ではなく Javascript にあります。ウィジェットを表示しないブラウザーが、ページに何らかのエラーがあることを通知するかどうかを確認してください。

Safari と Firefox には開発/デバッグ ツールがありますが、IE についてはよくわかりません。

于 2013-11-04T17:45:42.420 に答える