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

标签 php mysql preg-replace

如果用户输入类似 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']
);

Live demo

关于php - 如何使用 preg_replace 创建 mysql 格式的日期并在日期小于 10 时填充 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799319/

相关文章:

php - Select2 Ajax不匹配结果

php - password_verify 不断带回假

MySQL 触发器适用于同一张表中的一个字段,不适用于第二个字段

php - 使用 preg_replace 清理小部件输出 HTML

php - 从字符串中查找价格的正则表达式

PHP递归练习构建数组

php - 测试一个数组是否是另一个数组的子集

php - 将自定义订单状态添加到 WooCommerce 管理订单列表中的过滤器菜单

php - 将 Wordpress Longtext 值转换为有效日期

php - 在 PHP 中替换文件内容