我正在使用这样的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)/'”中是否允许使用空格?双重否定“!!”是什么?我只是自己这样做,因为编写此函数的人最初正在这样做。
答案 0 :(得分:0)
.
(点)被视为正则表达式中的通配符。它几乎用于匹配任何角色。如果您想使用文字句点,请使用反斜杠(.
)逃离\
,如下所示:\.
。可能有用的参考: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()
的工作方式是测试括号内的表达式。如果该表达式的计算结果为true,则运行下一个语句(无论是单个语句还是块语句)。有布尔运算符(即==
,||
等)返回一个布尔值。例如,$test == 0
将评估为true或false,具体取决于$test
是否计算为整数0。
此外,在此函数中包含两个return false;
语句是多余的。为什么不测试iPod,iPhone等?如果那不是return true;
,那么return false;
。