如何匹配navigator.userAgent字符串从对象数组获取对应手机型号
你的代码同时存在语法错误和逻辑疏漏,具体问题及修正方案如下:
问题说明
- 正则构造语法错误:
detectPhone.match(phoneModels[i].code/g)的写法不符合JS语法规则,字符串变量不能直接拼接正则修饰符,运行时会直接抛出语法错误。如果要使用变量内容作为匹配规则,必须通过RegExp构造函数创建正则实例。 - 大小写匹配逻辑缺失:UA字符串中的型号编码可能是大小写混合格式,你预设的code字段为全大写,默认大小写敏感的匹配规则会导致小写编码(比如你举例的
SM-N975f)匹配失败。 - 迭代变量未声明:for循环中的
i没有加声明关键字,会成为全局变量,可能引发其他未知的作用域冲突问题。
修正后代码
<div id="compare-phone-display"></div> <script> function compare(){ const detectPhone = navigator.userAgent; const phoneModels = [ { code: "SM-N975F", name: "Note 10" }, { code: "SM-G900P", name: "Galaxy S5" } ]; for(let i = 0; i < phoneModels.length; i++) { // 构造正则,i修饰符忽略大小写,无需提取匹配结果用test方法性能更优 const matchReg = new RegExp(phoneModels[i].code, 'i'); if(matchReg.test(detectPhone)) { document.getElementById("compare-phone-display").innerHTML = phoneModels[i].name; // 匹配到对应型号后直接跳出循环,避免后续匹配覆盖结果 break; } } } compare(); </script>
内容的提问来源于stack exchange,提问作者Gosi
相关产品推荐
相关产品推荐

