2

「dd/mm/yyyy HH:ii:ss」から YYYY-MM-DD HH:II:SS に日付を再フォーマットする正規表現がありますが、これは問題ありませんが、日付のみの検証にも同じものを使用します (時間指定あり)。

置換にデフォルト値を与える方法があるかもしれませんが、見つかりませんでした。

$regex = '#^(\d{2})/(\d{2})/(\d{4})(?: (\d{2}):(\d{2})(?::(\d{2}))?)?$#';
$replace = '$3-$2-$1 $4:$5:00';


$str = '07/11/2013 20:30';
$val = preg_replace($regex, $replace, $str);
echo $val;  // "2013-11-07 20:30:00"

$str = '07/11/2013';
$val = preg_replace($regex, $replace, $str);
echo $val; // "2013-11-07 ::00"
4

2 に答える 2

2

カスタム コールバック メソッドを使用preg_replace_callbackおよび提供して、置換を実行できます。コールバック内で、デフォルト値を適用できます。

$regex = '#^(\d{2})/(\d{2})/(\d{4})(?: (\d{2}):(\d{2})(?::(\d{2}))?)?$#';
$replace = function ($m) {
    if (!$m[4]) $m[4] = '00';
    if (!$m[5]) $m[5] = '00';
    return "$m[3]-$m[2]-$m[1] $m[4]:$m[5]:00";
};

$str = '07/11/2013 20:30';
$val = preg_replace_callback($regex, $replace, $str);
echo $val;  // "2013-11-07 20:30:00"

$str = '07/11/2013';
$val = preg_replace_callback($regex, $replace, $str);
echo $val;  // "2013-11-07 00:00:00"
于 2013-11-07T00:03:54.000 に答える
0

日付と時刻を検証するには、これを試してください:

$regex = '(\d{2})/(\d{2})/(\d{4}) (\d{2}):(\d{2}):(\d{2})';
于 2013-11-07T00:04:09.213 に答える