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

正则匹配仅返回最后匹配值:如何优先获取Windows Phone识别结果

解决User-Agent正则匹配时优先返回指定操作系统的问题

问题场景

当传入的User-Agent同时包含Windows Phone和Android标识时:

Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; SAMSUNG; GT-I8750) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Mobile Safari/537.36 Edge/15.15063

当前代码会返回最后匹配到的Android,但实际需求是优先返回Windows Phone 10.0。

问题原因

你的foreach循环会遍历所有正则规则,每次匹配成功都会覆盖$os_platform变量,后匹配到的规则结果会覆盖之前的,导致预设的优先级逻辑失效。

解决方案

一旦找到匹配的规则,立即返回对应的结果,终止后续循环,这样排在数组前面的规则就会拥有最高优先级。同时调整返回值,让它完全符合你的期望输出:

修改后的PHP代码:

function getOS() { 
    global $user_agent;
    $os_platform = "Unknown OS Platform";
    $os_array = array(
        '/Windows Phone 10.0/i' => 'Windows Phone 10.0', // 调整返回值匹配期望输出
        '/android/i'            => 'Android',
    );

    foreach ($os_array as $regex => $value) { 
        if (preg_match($regex, $user_agent)) {
            return $value; // 匹配成功直接返回,终止后续循环
        }
    }

    return $os_platform;
}

关键说明

  • 遍历规则时,第一个匹配成功的规则会直接返回对应值,后续规则不再执行,保证了Windows Phone规则的优先级
  • 将原返回值Windows Phone 10调整为Windows Phone 10.0,让输出完全匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:32:07