如果用户输入类似 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})$/', '$3-$2-$1', $_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})$/', '$3-0$2-0$1', $_GET['search']);
但我随后得到以下 1985-005-001 我想得到 1985-05-01
我见过类似的东西 here如果数字小于 10,则进行填充。但是我不知道如何格式化日期,因为我的 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']
);
关于php - 如何使用 preg_replace 创建 mysql 格式的日期并在日期小于 10 时填充 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799319/