如何使用 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']
);
如果用户输入日期格式如 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']
);