如何使用 preg_replace 创建 mysql 格式的日期并在日期小于 10 时填充 0

How to use preg_replace to create a mysql formatted date and to pad a 0 if the date is less than 10

如果用户输入日期格式如 01/05/1985 (DD/MM/YYY),我将使用 1985-05-01 得到格式化结果

$_GET['search'] = '01/05/1985';
$search = preg_replace('/^(\d{1,2})\W(\d{1,2})\W(\d{4})$/', '--', $_GET['search']);

这就是我想要的。但是如果用户这样写:1/5/1985 我会得到 1985-5-1 这不是我想要的。仅当值小于 10 时,如何在日或月部分填充零?

我试过使用:

$_GET['search'] = '01/05/1985';
$search = preg_replace('/^(\d{1,2})\W(\d{1,2})\W(\d{4})$/', '-0-0', $_GET['search']);

但是我得到以下 1985-005-001 我想得到 1985-05-01

如果数字小于 10,我在填充时看到了一些类似的东西 here。但是我不知道如何格式化日期,因为我的 RegEx 知识非常薄弱。

有人可以告诉我如何仅使用 php 正则表达式而不使用 php 日期函数来获取结果吗?谢谢。

我会在 preg_replace_callback 中使用 str_pad 因为后者允许你提供一个函数来格式化正则表达式匹配

$search = preg_replace_callback(
    '/^(\d{1,2})\W(\d{1,2})\W(\d{4})$/',
    function($v){
        return $v[3].'-'
                . str_pad($v[2], 2, '0', STR_PAD_LEFT).'-'
                . str_pad($v[1], 2, '0', STR_PAD_LEFT);
    },
    $_GET['search']
);

Live demo