You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP循环处理数据库字符串:仅保留dd-mm-yyyy格式日期

提取字符串中的dd-mm-yyyy格式日期

我来帮你搞定这个日期提取的问题!你现在的需求是从数据库返回的字符串里只保留dd-mm-yyyy格式的日期,其他所有内容都删掉对吧?之前用str_replace替换固定文本的方法确实不太靠谱,毕竟文本里混着数字,没法简单粗暴删字母解决。

最稳妥的办法是用正则表达式精准匹配日期格式,PHP里的preg_match_all函数刚好能帮我们搞定这个事。下面给你两种方案,按需选择:

基础匹配方案(兼容1/2位的日/月)

这个方案能匹配所有符合dd-mm-yyyy格式的串,不管日和月是1位还是2位(比如5-3-2024或者05-03-2024都能抓到):

// 从数据库获取原始字符串
$originalText = $row['AboOpmerking'];

// 定义匹配dd-mm-yyyy格式的正则
$datePattern = '/\b\d{1,2}-\d{1,2}-\d{4}\b/';
// 提取所有符合格式的日期
preg_match_all($datePattern, $originalText, $matchedDates);

// 把匹配到的日期拼接成字符串(多个日期用逗号分隔,可按需调整)
$cleanedContent = !empty($matchedDates[0]) ? implode(', ', $matchedDates[0]) : '';

// 存入结果数组
$result[] = [
    'AboOpmerking' => $cleanedContent,
];

严格匹配方案(过滤无效日期)

如果需要过滤掉像32-13-2024这种明显无效的日期,可以用更精准的正则,限制日在1-31、月在1-12范围内:

$originalText = $row['AboOpmerking'];

// 严格匹配合法的dd-mm-yyyy日期
$strictDatePattern = '/\b(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-\d{4}\b/';
preg_match_all($strictDatePattern, $originalText, $strictMatchedDates);

$cleanedContent = !empty($strictMatchedDates[0]) ? implode(', ', $strictMatchedDates[0]) : '';

$result[] = [
    'AboOpmerking' => $cleanedContent,
];

为啥这个方法比你之前的好用?

你之前的str_replace只能替换你预先定义好的文本,但如果数据库里的字符串有新的表述(比如突然出现别的说明文字),就会失效。用正则的话,不管中间夹了什么内容,只要是符合格式的日期,都能精准抓出来,适应性强多了。

内容的提问来源于stack exchange,提问作者Kees Sonnema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:09:13