Regex: match non-android mobile user agents
我需要匹配一个UA,如果它包含移动,但不包含Android。我试过了
1 | Windows Phone|WPDesktop|BlackBerry|Opera Mini|Opera Mobi|Silk\/|Kindle|(?!.*Android).*Mobile.*|SymbianOS |
但并不总是有效。
另外,如何排除"windows"和"android"?(考虑到Windows冒充自己是安卓和iPhone…)
编辑:一些测试字符串(android、iphone、wp等):
Mozilla/5.0 (Linux; Android 4.1.2; GT-I8190N Build/JZO54K)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile
Safari/537.36Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X)
AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D167
Safari/9537.53Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0;
Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 930) like iPhone OS 7_0_3
Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537UCWEB/2.0 (Symbian; U; S60 V5; en-US; Nokia700) U2/1.0.0
UCBrowser/9.2.0.336 U2/1.0.0 Mobile
通过@avinash raj解决:
所有移动电话:
1 | ^(?:.*(Mobile|Android|iPhone|Windows Phone|WPDesktop|RIM|BlackBerry|Opera Mini|Opera Mobi|Silk\/|Kindle|Symbian).*)$ |
IOS只:
1 | ^(?:(?!.*?(?:Windows|Android)).*?iPhone.*)$ |
仅安卓系统:
1 | ^(?:(?!.*?(?:Windows)).*?Android.*)$ |
除Android和iOS以外的所有系统:
1 | ^(?:.*Windows Phone.*|.*WPDesktop.*|.*RIM.*|.*BlackBerry.*|.*Opera Mini.*|.*Opera Mobi.*|.*Silk\/.*|.*Kindle.*|(?!.*?(?:iPhone|Android)).*?Mobile.*|.*Symbian.*)$ |
你可以试试下面的正则表达式。
1 | ^(?:Windows Phone|WPDesktop|BlackBerry|Opera Mini|Opera Mobi|Silk\/|Kindle|(?!.*?(?:Windows|Android)).*?Mobile.*|SymbianOS)$ |
演示
或
1 | \b(?:Windows Phone|WPDesktop|BlackBerry|Opera Mini|Opera Mobi|Silk\/|Kindle|(?!.*?(?:Windows|Android)).*+Mobile.*+|SymbianOS)\b |
演示