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

如何用PHP拆分包含带变音符号的邮编与城镇的字符串

用PHP拆分带变音符号的邮编与城镇名称字符串

刚好之前处理过类似的需求,针对你提到的两种邮编格式(连续5位数字,或者3位+2位带空格)、城镇名带变音符号的字符串拆分,用正则表达式是最省心的方案——既能精准匹配邮编模式,还能完美兼容Unicode变音字符。

直接上可运行的代码示例:

<?php
// 你的示例数据
$addressList = [
    '60200 Praha',
    '73000 Valašské Meziříčí',
    '641 02 Nové Město nad Metují'
];

// 核心正则:匹配两种邮编格式,同时兼容Unicode字符
$zipTownPattern = '/^(\d{5}|\d{3} \d{2}) (.*)$/u';

foreach ($addressList as $address) {
    if (preg_match($zipTownPattern, $address, $matches)) {
        $zipcode = trim($matches[1]); // 保险起见加个trim,防止意外空格
        $town = trim($matches[2]);
        
        // 这里可以替换成你需要的业务逻辑,比如存储到变量或数据库
        echo "拆分结果:邮编 = {$zipcode},城镇名 = {$town}\n";
    } else {
        echo "⚠️ 无法识别的格式:{$address}\n";
    }
}
?>

代码细节解释:

  • 正则里的(\d{5}|\d{3} \d{2})是捕获邮编的分组:\d{5}匹配连续5位数字,\d{3} \d{2}匹配带空格的3+2位邮编,用|做或逻辑
  • (.*)用来捕获城镇名部分,因为加了u修饰符,所以能正确识别所有Unicode变音字符(比如š、é、ří这些)
  • u修饰符是关键!没有它的话,正则可能会把变音符号当成乱码处理,导致城镇名截取错误

如果你的字符串里偶尔会出现多个空格分隔邮编和城镇,或者开头有多余空白,可以把正则里的单个空格改成\s+(匹配一个或多个空白字符),调整后的正则是:

/^(\d{5}|\d{3} \d{2})\s+(.*)$/u

这样就更灵活啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:27:33