php 正则表达式只取最后一个值

pw136qt2  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(124)

我的问题是当regex得到任何值时,它只取最后一个正确的值
输入

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

我的代码

function getOS() { 
  global $user_agent;
  $os_platform    = "Unknown OS Platform";
  $os_array       = array(
'/Windows Phone 10.0/i'         =>  'Windows Phone 10',
'/android/i'            =>  'Android',

    );

foreach ($os_array as $regex => $value) { 
  if (preg_match($regex, $user_agent)) {
    $os_platform  = $value;
  }
}

return $os_platform;
}

它将替换为他获得的最后一个正确匹配...我只想拿“Windows Phone 10. 0”,即使它在我的输入中找到“Android”。
谢谢

gudnpqoy

gudnpqoy1#

您所面临的问题是代码正在用$os_array中找到的最后一个匹配项覆盖$os_platform变量。要获得所需的结果,可以修改代码,以便在找到匹配项后停止搜索。

function getOS(userAgent) {
  let osPlatform = "Unknown OS Platform";
  const osArray = [
    { regex: /Windows Phone 10\.0/i, value: 'Windows Phone 10' },
    { regex: /android/i, value: 'Android' }
  ];

  for (const item of osArray) {
    if (item.regex.test(userAgent)) {
      osPlatform = item.value;
      break; // Stop searching once a match is found
    }
  }

  return osPlatform;
}

const userAgent = "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";
const os = getOS(userAgent);
console.log(os); // Output: "Windows Phone 10"

相关问题