php - 在 PHP 中使用正则表达式进行 iOS 检测

标签 php regex

我来到这里寻找通过用户代理嗅探 iOS 6 的答案,并在这里找到了一个很好的答案:How to detect iOS 6 and all minor versions by user agent?

我以前使用过的所有正则表达式都非常简单,我正在用头撞墙试图让这个正则表达式正常工作。不幸的是,PHP 解析器没有给我任何错误!

我知道我确实做错了什么,因为我在我的笔记本电脑上运行 firefox 时匹配了下面的代码。

如果有人能在这里指出我正确的方向,我将不胜感激,我不知道我做错了什么。

$subject = $_SERVER['HTTP_USER_AGENT'];
$pattern = '~^(?:(?:(?:Mozilla/\d.\d\s*()+|Mobile\s*Safari\s*\d+.\d+(.\d+)?\s*)(?:iPhone(?:\s+Simulator)?|iPad|iPod);\s*(?:U;\s*)?(?:[a-z]+(?:-[a-z]+)?;\s*)?CPU\s* (?:iPhone\s*)?(?:OS\s*\d+\d+(?:\d+)?\s*)?(?:like|comme)\s*Mac\s*O?S?\s*X(?:;\s*[a-z]+(?:-[a-z]+)?)?)\s*)?(?:AppleWebKit/\d+(?:.\d+(?:.\d+)?|\s*+)?\s*)?(?:(KHTML,\s*(?:like|comme)\s*Gecko\s*)\s*)?(?:Version/\d+.\d+(?:.\d+)?\s*)?(?:Mobile/\w+\s*)?(?:Safari/\d+.\d+(.\d+)?)?.*$~';

if (preg_match($pattern,$subject))
{
    echo "match";
}

最佳答案

试试这个:

^(?:(?:(?:Mozilla/\d\.\d\s*\()+|Mobile\s*Safari\s*\d+\.\d+(\.\d+)?\s*)(?:iPhone(?:\s+Simulator)?|iPad|iPod);\s*(?:U;\s*)?(?:[a-z]+(?:-[a-z]+)?;\s*)?CPU\s*(?:iPhone\s*)?(?:OS\s*\d+_\d+(?:_\d+)?\s*)?(?:like|comme)\s*Mac\s*O?S?\s*X(?:;\s*[a-z]+(?:-[a-z]+)?)?\)\s*)?(?:AppleWebKit/\d+(?:\.\d+(?:\.\d+)?|\s*\+)?\s*)?(?:\(KHTML,\s*(?:like|comme)\s*Gecko\s*\)\s*)?(?:Version/\d+\.\d+(?:\.\d+)?\s*)?(?:Mobile/\w+\s*)?(?:Safari/\d+\.\d+(\.\d+)?.*)?$

演示:http://gskinner.com/RegExr/?32eou

一个更通用的解决方案:http://code.google.com/p/php-mobile-detect/

关于php - 在 PHP 中使用正则表达式进行 iOS 检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861356/

相关文章:

php - 如何使用 for 循环遍历 mysql_fetch_array()?

regex - Groovy正则表达式闭包

python - 研究 "TypeError: expected string or bytes-like object"

regex - grep匹配的行和字符串位置

mysql regexp 其中一些字符 + 1 个未知字符

php - JSON.stringify() 对于序列化 JSON 对象是否可靠?

javascript - 如何在具有多行且动态构建的数据表中提交表单?

php - 将 Excel 电子表格转换为 PHP 脚本

php - 使用PHP自动打印网页

c 正则表达式找不到字符串