0

我正在使用一个看起来像这样的 php 函数来检查我网站的用户是否在移动设备上:

function isMobileCheckByAgent()
{
return !!preg_match('/(iPod|iPhone|Android|BlackBerry|SymbianOS|SCH-M\d+|Googlebot-Mobile)/',$_SERVER['HTTP_USER_AGENT']);
}

现在我有两台设备,华硕 Nexus 7 和 Galaxy Tab(平板电脑),我想为我的桌面网站而不是移动设备提供服务,因为它们更大的屏幕可以处理它。

因此,查看这些设备从 HTTP_USER_AGENT 返回的内容,我决定查找字符串:

Nexus 7 和 Windows NT 6.1

所以我写道:

function isMobileCheckByAgent()
{
 if(!!preg_match('/(Nexus 7|Windows NT 6.1)/',$_SERVER['HTTP_USER_AGENT']) == true)
 {
 return (false);
 }
 elseif(!!preg_match('/(iPod|iPhone|Android|BlackBerry|SymbianOS|SCH-M\d+|Googlebot-Mobile)/',$_SERVER['HTTP_USER_AGENT']) == true)
 {
 return (true);
 }
 else
 {
 return(false);
 }
}

但不可否认,我的 php 技能缺乏并且在这里失败了。我想切换到桌面站点的设备仍在移动站点提供服务。有谁知道我哪里出错了,或者我可以如何改进这个功能来返回我想要的东西?"preg_match('/(Nexus 7|Windows NT 6.1)/'" 中是否允许使用空格?双重否定“!!”是怎么回事?我只是自己做,因为最初编写此函数的人正在做。

4

1 回答 1

0

A .(点)在正则表达式中被视为通配符。它用于匹配几乎任何字符。.用这样的反斜杠 ( )转义你\\.如果你想使用文字句点。可能有帮助的参考:http ://www.regular-expressions.info/reference.html

你试图强制一个布尔值的方式preg_match()很糟糕。如果我没记错的话,0 是假的,PHP 中的任何其他数字都是真的。不过,我个人不会依赖它,并且会认为这是不好的风格。 !0因此结果为真,!!0结果为假。只测试整数 0,而不是真理。

文档preg_match()http ://us2.php.net/manual/en/function.preg-match.php

此外,if()有效的方法是它测试括号内的表达式。如果该表达式的计算结果为真,则运行下一条语句(无论是单个语句还是块语句)。有返回布尔值的布尔运算符(即==||等)。例如$test == 0,将评估为真或假,具体取决于是否$test评估为整数 0。

此外,在此函数中有两个return false;语句是多余的。为什么不只测试 iPod、iPhone 等?如果没有return true;,那么return false;

于 2013-06-03T23:03:36.197 回答