user_agent_parser 0.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of user_agent_parser might be problematic. Click here for more details.

@@ -1,28 +1,29 @@
1
- ### THIS FILE WAS COPIED ON JAN 26 2012.
2
- ### ORIGINAL IS AT: http://code.google.com/p/ua-parser/source/browse/trunk/resources/user_agent_parser.yaml
3
- ### Please review the CHANGELOG to see how this file differs from the original
4
1
  user_agent_parsers:
5
2
  #### SPECIAL CASES TOP ####
6
3
 
7
- # must go before Opera
8
- - regex: '^(Opera)/(\d+)\.(\d+) \(Nintendo Wii'
9
- family_replacement: 'Wii'
10
-
11
4
  # must go before Firefox to catch SeaMonkey/Camino
12
5
  - regex: '(SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
13
6
 
14
7
  # Firefox
8
+ - regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?'
9
+ family_replacement: 'Pale Moon (Firefox Variant)'
15
10
  - regex: '(Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
16
11
  family_replacement: 'Firefox Mobile'
17
12
  - regex: '(Fennec)/(\d+)\.(\d+)(pre)'
18
- family_replacment: 'Firefox Mobile'
13
+ family_replacement: 'Firefox Mobile'
19
14
  - regex: '(Fennec)/(\d+)\.(\d+)'
20
15
  family_replacement: 'Firefox Mobile'
16
+ - regex: 'Mobile.*(Firefox)/(\d+)\.(\d+)'
17
+ family_replacement: 'Firefox Mobile'
21
18
  - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre)?)'
22
19
  family_replacement: 'Firefox ($1)'
23
- - regex: '(Firefox)/(\d+)\.(\d+)([ab]\d+[a-z]*)'
20
+ - regex: '(Firefox)/(\d+)\.(\d+)(a\d+[a-z]*)'
21
+ family_replacement: 'Firefox Alpha'
22
+ - regex: '(Firefox)/(\d+)\.(\d+)(b\d+[a-z]*)'
24
23
  family_replacement: 'Firefox Beta'
25
- - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)([ab]\d+[a-z]*)'
24
+ - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(a\d+[a-z]*)'
25
+ family_replacement: 'Firefox Alpha'
26
+ - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(b\d+[a-z]*)'
26
27
  family_replacement: 'Firefox Beta'
27
28
  - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*)?'
28
29
  family_replacement: 'Firefox ($1)'
@@ -61,16 +62,16 @@ user_agent_parsers:
61
62
  - regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?'
62
63
 
63
64
  # Palm WebOS looks a lot like Safari.
64
- - regex: '(webOSBrowser)/(\d+)\.(\d+)'
65
- - regex: '(webOS)/(\d+)\.(\d+)'
66
- family_replacement: 'webOSBrowser'
67
- - regex: '(wOSBrowser).+TouchPad/(\d+)\.(\d+)'
68
- family_replacement: 'webOS TouchPad'
65
+ - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
66
+ family_replacement: 'webOS Browser'
69
67
 
70
68
  # LuaKit has no version info.
71
69
  # http://luakit.org/projects/luakit/
72
70
  - regex: '(luakit)'
73
71
  family_replacement: 'LuaKit'
72
+
73
+ # Snowshoe
74
+ - regex: '(Snowshoe)/(\d+)\.(\d+).(\d+)'
74
75
 
75
76
  # Lightning (for Thunderbird)
76
77
  # http://www.mozilla.org/projects/calendar/lightning/
@@ -83,6 +84,8 @@ user_agent_parsers:
83
84
  family_replacement: 'Swiftfox'
84
85
 
85
86
  # Rekonq
87
+ - regex: '(rekonq)/(\d+)\.(\d+) Safari'
88
+ family_replacement: 'Rekonq'
86
89
  - regex: 'rekonq'
87
90
  family_replacement: 'Rekonq'
88
91
 
@@ -100,38 +103,94 @@ user_agent_parsers:
100
103
  - regex: '(Comodo_Dragon)/(\d+)\.(\d+)\.(\d+)'
101
104
  family_replacement: 'Comodo Dragon'
102
105
 
103
- # YottaaMonitor bot
104
- - regex: '(YottaaMonitor)'
105
-
106
- # must go before NetFront below
107
- - regex: '(Kindle)/(\d+)\.(\d+)'
106
+ # Bots
107
+ - regex: '(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)'
108
108
 
109
109
  - regex: '(Symphony) (\d+).(\d+)'
110
110
 
111
- - regex: 'Minimo'
111
+ - regex: '(Minimo)'
112
112
 
113
113
  # Chrome Mobile
114
114
  - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
115
115
  family_replacement: 'Chrome Mobile'
116
+ - regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
117
+ family_replacement: 'Chrome Mobile iOS'
118
+ - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile'
119
+ family_replacement: 'Chrome Mobile'
120
+
121
+ # Chrome Frame must come before MSIE.
122
+ - regex: '(chromeframe)/(\d+)\.(\d+)\.(\d+)'
123
+ family_replacement: 'Chrome Frame'
116
124
 
117
125
  # UC Browser
118
- - regex: '(UC Browser)(\d+)\.(\d+)\.(\d+)'
126
+ - regex: '(UCBrowser)[ /](\d+)\.(\d+)\.(\d+)'
127
+ family_replacement: 'UC Browser'
128
+ - regex: '(UC Browser)[ /](\d+)\.(\d+)\.(\d+)'
129
+ - regex: '(UC Browser|UCBrowser|UCWEB)(\d+)\.(\d+)\.(\d+)'
130
+ family_replacement: 'UC Browser'
131
+
132
+ # Tizen Browser (second case included in browser/major.minor regex)
133
+ - regex: '(SLP Browser)/(\d+)\.(\d+)'
134
+ family_replacement: 'Tizen Browser'
135
+
136
+ # Epiphany browser (identifies as Chromium)
137
+ - regex: '(Epiphany)/(\d+)\.(\d+).(\d+)'
138
+
139
+ # Sogou Explorer 2.X
140
+ - regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)'
141
+ family_replacement: 'Sogou Explorer'
142
+
143
+ # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile)
144
+ - regex: '(baidubrowser)[/\s](\d+)'
145
+ family_replacement: 'Baidu Browser'
146
+ - regex: '(FlyFlow)/(\d+)\.(\d+)'
147
+ family_replacement: 'Baidu Explorer'
148
+
149
+ # Pingdom
150
+ - regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)'
151
+ family_replacement: 'PingdomBot'
152
+
153
+ # Facebook
154
+ - regex: '(facebookexternalhit)/(\d+)\.(\d+)'
155
+ family_replacement: 'FacebookBot'
156
+
157
+ # Twitterbot
158
+ - regex: '(Twitterbot)/(\d+)\.(\d+)'
159
+ family_replacement: 'TwitterBot'
160
+
161
+ # Rackspace Monitoring
162
+ - regex: '(Rackspace Monitoring)/(\d+)\.(\d+)'
163
+ family_replacement: 'RackspaceBot'
164
+
165
+ # PyAMF
166
+ - regex: '(PyAMF)/(\d+)\.(\d+)\.(\d+)'
167
+
168
+ # Yandex Browser
169
+ - regex: '(YaBrowser)/(\d+)\.(\d+)\.(\d+)'
170
+ family_replacement: 'Yandex Browser'
171
+
172
+ # Mail.ru Amigo/Internet Browser (Chromium-based)
173
+ - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).* MRCHROME'
174
+ family_replacement: 'Mail.ru Chromium Browser'
119
175
 
120
176
  #### END SPECIAL CASES TOP ####
121
177
 
122
178
  #### MAIN CASES - this catches > 50% of all browsers ####
123
179
 
124
180
  # Browser/major_version.minor_version.beta_version
125
- - regex: '(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iron|Iris|UP\.Browser|Bunjaloo)/(\d+)\.(\d+)\.(\d+)'
181
+ - regex: '(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)'
126
182
 
127
183
  # Browser/major_version.minor_version
128
- - regex: '(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo)/(\d+)\.(\d+)'
184
+ - regex: '(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser)/(\d+)\.(\d+)'
129
185
 
130
186
  # Browser major_version.minor_version.beta_version (space instead of slash)
131
187
  - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)'
132
188
  # Browser major_version.minor_version (space instead of slash)
133
- - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|BREW) (\d+)\.(\d+)\.?(\d+)?'
134
-
189
+ - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris) (\d+)\.(\d+)\.?(\d+)?'
190
+
191
+ # Kindle WebKit
192
+ - regex: '(Kindle)/(\d+)\.(\d+)'
193
+
135
194
  # weird android UAs
136
195
  - regex: '(Android) Donut'
137
196
  v1_replacement: '1'
@@ -170,18 +229,33 @@ user_agent_parsers:
170
229
  - regex: '(Obigo)InternetBrowser'
171
230
  - regex: '(Obigo)\-Browser'
172
231
  - regex: '(Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+))?'
232
+ family_replacement: 'Obigo'
173
233
 
174
234
  - regex: '(MAXTHON|Maxthon) (\d+)\.(\d+)'
175
235
  family_replacement: 'Maxthon'
176
236
  - regex: '(Maxthon|MyIE2|Uzbl|Shiira)'
177
237
  v1_replacement: '0'
178
238
 
179
- - regex: '(PLAYSTATION) (\d+)'
180
- family_replacement: 'PlayStation'
181
- - regex: '(PlayStation Portable)[^\d]+(\d+).(\d+)'
239
+ - regex: 'PLAYSTATION 3.+WebKit'
240
+ family_replacement: 'NetFront NX'
241
+ - regex: 'PLAYSTATION 3'
242
+ family_replacement: 'NetFront'
243
+ - regex: '(PlayStation Portable)'
244
+ family_replacement: 'NetFront'
245
+ - regex: '(PlayStation Vita)'
246
+ family_replacement: 'NetFront NX'
247
+
248
+ - regex: 'AppleWebKit.+ (NX)/(\d+)\.(\d+)\.(\d+)'
249
+ family_replacement: 'NetFront NX'
250
+ - regex: '(Nintendo 3DS)'
251
+ family_replacement: 'NetFront NX'
182
252
 
183
253
  - regex: '(BrowseX) \((\d+)\.(\d+)\.(\d+)'
184
254
 
255
+ - regex: '(NCSA_Mosaic)/(\d+)\.(\d+)'
256
+ family_replacement: 'NCSA Mosaic'
257
+
258
+ # Polaris/d.d is above
185
259
  - regex: '(POLARIS)/(\d+)\.(\d+)'
186
260
  family_replacement: 'Polaris'
187
261
  - regex: '(Embider)/(\d+)\.(\d+)'
@@ -190,56 +264,71 @@ user_agent_parsers:
190
264
  - regex: '(BonEcho)/(\d+)\.(\d+)\.(\d+)'
191
265
  family_replacement: 'Bon Echo'
192
266
 
267
+ - regex: 'M?QQBrowser'
268
+ family_replacement: 'QQ Browser'
269
+
193
270
  - regex: '(iPod).+Version/(\d+)\.(\d+)\.(\d+)'
194
271
  family_replacement: 'Mobile Safari'
195
272
  - regex: '(iPod).*Version/(\d+)\.(\d+)'
196
273
  family_replacement: 'Mobile Safari'
197
- - regex: '(iPod)'
198
- family_replacement: 'Mobile Safari'
199
274
  - regex: '(iPhone).*Version/(\d+)\.(\d+)\.(\d+)'
200
275
  family_replacement: 'Mobile Safari'
201
276
  - regex: '(iPhone).*Version/(\d+)\.(\d+)'
202
277
  family_replacement: 'Mobile Safari'
203
- - regex: '(iPhone)'
204
- family_replacement: 'Mobile Safari'
205
278
  - regex: '(iPad).*Version/(\d+)\.(\d+)\.(\d+)'
206
279
  family_replacement: 'Mobile Safari'
207
280
  - regex: '(iPad).*Version/(\d+)\.(\d+)'
208
281
  family_replacement: 'Mobile Safari'
209
- - regex: '(iPad)'
282
+ - regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)(?:_\d+)?_(\d+).*Mobile'
283
+ family_replacement: 'Mobile Safari'
284
+ - regex: '(iPod|iPhone|iPad)'
210
285
  family_replacement: 'Mobile Safari'
211
286
 
212
287
  - regex: '(AvantGo) (\d+).(\d+)'
288
+
289
+ - regex: '(OneBrowser)/(\d+).(\d+)'
290
+ family_replacement: 'ONE Browser'
213
291
 
214
292
  - regex: '(Avant)'
215
293
  v1_replacement: '1'
216
294
 
295
+ # This is the Tesla Model S (see similar entry in device parsers)
296
+ - regex: '(QtCarBrowser)'
297
+ v1_replacement: '1'
298
+
299
+ - regex: '(iBrowser/Mini)(\d+).(\d+)'
300
+ family_replacement: 'iBrowser Mini'
217
301
  # nokia browsers
218
302
  # based on: http://www.developer.nokia.com/Community/Wiki/User-Agent_headers_for_Nokia_devices
219
303
  - regex: '^(Nokia)'
220
304
  family_replacement: 'Nokia Services (WAP) Browser'
221
305
  - regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)\.(\d+)'
306
+ family_replacement: 'Nokia Browser'
222
307
  - regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)'
308
+ family_replacement: 'Nokia Browser'
223
309
  - regex: '(NokiaBrowser)/(\d+)\.(\d+)'
310
+ family_replacement: 'Nokia Browser'
224
311
  - regex: '(BrowserNG)/(\d+)\.(\d+).(\d+)'
225
- family_replacement: 'NokiaBrowser'
312
+ family_replacement: 'Nokia Browser'
226
313
  - regex: '(Series60)/5\.0'
227
- family_replacement: 'NokiaBrowser'
314
+ family_replacement: 'Nokia Browser'
228
315
  v1_replacement: '7'
229
316
  v2_replacement: '0'
230
317
  - regex: '(Series60)/(\d+)\.(\d+)'
231
318
  family_replacement: 'Nokia OSS Browser'
232
319
  - regex: '(S40OviBrowser)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
233
- family_replacement: 'Nokia Series 40 Ovi Browser'
320
+ family_replacement: 'Ovi Browser'
234
321
  - regex: '(Nokia)[EN]?(\d+)'
235
322
 
236
323
  # BlackBerry devices
324
+ - regex: '(BB10);'
325
+ family_replacement: 'BlackBerry WebKit'
237
326
  - regex: '(PlayBook).+RIM Tablet OS (\d+)\.(\d+)\.(\d+)'
238
- family_replacement: 'Blackberry WebKit'
327
+ family_replacement: 'BlackBerry WebKit'
239
328
  - regex: '(Black[bB]erry).+Version/(\d+)\.(\d+)\.(\d+)'
240
- family_replacement: 'Blackberry WebKit'
329
+ family_replacement: 'BlackBerry WebKit'
241
330
  - regex: '(Black[bB]erry)\s?(\d+)'
242
- family_replacement: 'Blackberry'
331
+ family_replacement: 'BlackBerry'
243
332
 
244
333
  - regex: '(OmniWeb)/v(\d+)\.(\d+)'
245
334
 
@@ -258,6 +347,11 @@ user_agent_parsers:
258
347
 
259
348
  # Amazon Silk, should go before Safari
260
349
  - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
350
+ family_replacement: 'Amazon Silk'
351
+
352
+ # WebKit Nightly
353
+ - regex: '(AppleWebKit)/(\d+)\.?(\d+)?\+ .* Safari'
354
+ family_replacement: 'WebKit Nightly'
261
355
 
262
356
  # Safari
263
357
  - regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
@@ -274,11 +368,50 @@ user_agent_parsers:
274
368
 
275
369
  - regex: '(Teleca)'
276
370
  family_replacement: 'Teleca Browser'
371
+
372
+ - regex: '(Phantom)/V(\d+)\.(\d+)'
373
+ family_replacement: 'Phantom Browser'
277
374
 
278
375
  - regex: '(MSIE) (\d+)\.(\d+)'
279
376
  family_replacement: 'IE'
280
377
 
378
+ - regex: '(python-requests)/(\d+)\.(\d+)'
379
+ family_replacement: 'Python Requests'
380
+
281
381
  os_parsers:
382
+
383
+ ##########
384
+ # Android
385
+ # can actually detect rooted android os. do we care?
386
+ ##########
387
+ - regex: '(Android) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
388
+ - regex: '(Android)\-(\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
389
+
390
+ - regex: '(Android) Donut'
391
+ os_v1_replacement: '1'
392
+ os_v2_replacement: '2'
393
+
394
+ - regex: '(Android) Eclair'
395
+ os_v1_replacement: '2'
396
+ os_v2_replacement: '1'
397
+
398
+ - regex: '(Android) Froyo'
399
+ os_v1_replacement: '2'
400
+ os_v2_replacement: '2'
401
+
402
+ - regex: '(Android) Gingerbread'
403
+ os_v1_replacement: '2'
404
+ os_v2_replacement: '3'
405
+
406
+ - regex: '(Android) Honeycomb'
407
+ os_v1_replacement: '3'
408
+
409
+ ##########
410
+ # Kindle Android
411
+ ##########
412
+ - regex: '(Silk-Accelerated=[a-z]{4,5})'
413
+ os_replacement: 'Android'
414
+
282
415
  ##########
283
416
  # Windows
284
417
  # http://en.wikipedia.org/wiki/Windows_NT#Releases
@@ -287,15 +420,14 @@ os_parsers:
287
420
  # lots of ua strings have Windows NT 4.1 !?!?!?!? !?!? !? !????!?! !!! ??? !?!?! ?
288
421
  # (very) roughly ordered in terms of frequency of occurence of regex (win xp currently most frequent, etc)
289
422
  ##########
290
- - regex: '(Windows Phone 6\.5)'
291
-
423
+
292
424
  - regex: '(Windows (?:NT 5\.2|NT 5\.1))'
293
425
  os_replacement: 'Windows XP'
294
426
 
295
427
  # ie mobile des ktop mode
296
428
  # spoofs nt 6.1. must come before windows 7
297
429
  - regex: '(XBLWP7)'
298
- os_replacement: 'Windows Phone OS'
430
+ os_replacement: 'Windows Phone'
299
431
 
300
432
  - regex: '(Windows NT 6\.1)'
301
433
  os_replacement: 'Windows 7'
@@ -303,7 +435,10 @@ os_parsers:
303
435
  - regex: '(Windows NT 6\.0)'
304
436
  os_replacement: 'Windows Vista'
305
437
 
306
- - regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000)'
438
+ - regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000|Windows 3.1)'
439
+
440
+ - regex: '(Windows NT 6\.2; ARM;)'
441
+ os_replacement: 'Windows RT'
307
442
 
308
443
  # is this a spoof or is nt 6.2 out and about in some capacity?
309
444
  - regex: '(Windows NT 6\.2)'
@@ -312,8 +447,8 @@ os_parsers:
312
447
  - regex: '(Windows NT 5\.0)'
313
448
  os_replacement: 'Windows 2000'
314
449
 
315
- - regex: '(Windows Phone OS) (\d+)\.(\d+)'
316
-
450
+ - regex: '(Windows Phone) (\d+)\.(\d+)'
451
+ - regex: '(Windows Phone) OS (\d+)\.(\d+)'
317
452
  - regex: '(Windows ?Mobile)'
318
453
  os_replacement: 'Windows Mobile'
319
454
 
@@ -324,36 +459,20 @@ os_parsers:
324
459
  os_replacement: 'Windows 98'
325
460
 
326
461
  ##########
327
- # Android
328
- # can actually detect rooted android os. do we care?
462
+ # Tizen OS from Samsung
463
+ # spoofs Android so pushing it above
329
464
  ##########
330
- - regex: '(Android) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
331
- - regex: '(Android)\-(\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
332
-
333
- - regex: '(Android) Donut'
334
- os_v1_replacement: '1'
335
- os_v2_replacement: '2'
336
-
337
- - regex: '(Android) Eclair'
338
- os_v1_replacement: '2'
339
- os_v2_replacement: '1'
340
-
341
- - regex: '(Android) Froyo'
342
- os_v1_replacement: '2'
343
- os_v2_replacement: '2'
344
-
345
- - regex: '(Android) Gingerbread'
346
- os_v1_replacement: '2'
347
- os_v2_replacement: '3'
348
-
349
- - regex: '(Android) Honeycomb'
350
- os_v1_replacement: '3'
465
+ - regex: '(Tizen)/(\d+)\.(\d+)'
351
466
 
352
467
  ##########
353
468
  # Mac OS
354
469
  # http://en.wikipedia.org/wiki/Mac_OS_X#Versions
355
470
  ##########
356
471
  - regex: '(Mac OS X) (\d+)[_.](\d+)(?:[_.](\d+))?'
472
+
473
+ # IE on Mac doesn't specify version number
474
+ - regex: 'Mac_PowerPC'
475
+ os_replacement: 'Mac OS'
357
476
 
358
477
  # builds before tiger don't seem to specify version?
359
478
 
@@ -375,6 +494,11 @@ os_parsers:
375
494
  - regex: '(iPhone|iPad|iPod).*Mac OS X.*Version/(\d+)\.(\d+)'
376
495
  os_replacement: 'iOS'
377
496
 
497
+ - regex: '(AppleTV)/(\d+)\.(\d+)'
498
+ os_replacement: 'ATV OS X'
499
+ os_v1_replacement: '$1'
500
+ os_v2_replacement: '$2'
501
+
378
502
  ##########
379
503
  # Chrome OS
380
504
  # if version 0.0.0, probably this stuff:
@@ -408,10 +532,14 @@ os_parsers:
408
532
  - regex: '(MeeGo)'
409
533
  - regex: 'Symbian [Oo][Ss]'
410
534
  os_replacement: 'Symbian OS'
535
+ - regex: 'Series40;'
536
+ os_replacement: 'Nokia Series 40'
411
537
 
412
538
  ##########
413
539
  # BlackBerry devices
414
540
  ##########
541
+ - regex: '(BB10);.+Version/(\d+)\.(\d+)\.(\d+)'
542
+ os_replacement: 'BlackBerry OS'
415
543
  - regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
416
544
  os_replacement: 'BlackBerry OS'
417
545
  - regex: '(Black[Bb]erry).+Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
@@ -421,13 +549,40 @@ os_parsers:
421
549
  - regex: '(Play[Bb]ook)'
422
550
  os_replacement: 'BlackBerry Tablet OS'
423
551
  - regex: '(Black[Bb]erry)'
424
- os_replacement: 'Blackberry OS'
552
+ os_replacement: 'BlackBerry OS'
425
553
 
554
+ ##########
555
+ # Firefox OS
556
+ ##########
557
+ - regex: '\(Mobile;.+Firefox/\d+\.\d+'
558
+ os_replacement: 'Firefox OS'
559
+
560
+ ##########
561
+ # BREW
562
+ # yes, Brew is lower-cased for Brew MP
563
+ ##########
564
+ - regex: '(BREW)[ /](\d+)\.(\d+)\.(\d+)'
565
+ - regex: '(BREW);'
566
+ - regex: '(Brew MP|BMP)[ /](\d+)\.(\d+)\.(\d+)'
567
+ os_replacement: 'Brew MP'
568
+ - regex: 'BMP;'
569
+ os_replacement: 'Brew MP'
570
+
571
+ ##########
572
+ # Google TV
573
+ ##########
574
+ - regex: '(GoogleTV) (\d+)\.(\d+)\.(\d+)'
575
+ # Old style
576
+ - regex: '(GoogleTV)\/\d+'
577
+
578
+ - regex: '(WebTV)/(\d+).(\d+)'
579
+
426
580
  ##########
427
581
  # Misc mobile
428
582
  ##########
429
- - regex: '(webOS|hpwOS)/(\d+)\.(\d+)(?:\.(\d+))?'
583
+ - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
430
584
  os_replacement: 'webOS'
585
+ - regex: '(VRE);'
431
586
 
432
587
  ##########
433
588
  # Generic patterns
@@ -444,7 +599,10 @@ os_parsers:
444
599
 
445
600
  # just os
446
601
  - regex: '(Windows|OpenBSD|FreeBSD|NetBSD|Ubuntu|Kubuntu|Android|Arch Linux|CentOS|WeTab|Slackware)'
602
+ - regex: '(Linux)/(\d+)\.(\d+)'
447
603
  - regex: '(Linux|BSD)'
604
+ - regex: 'SunOS'
605
+ os_replacement: 'Solaris'
448
606
 
449
607
  device_parsers:
450
608
  ##########
@@ -474,30 +632,64 @@ device_parsers:
474
632
  - regex: 'Sprint APA(9292)'
475
633
  device_replacement: 'HTC $1 (Sprint)'
476
634
  - regex: 'HTC ([A-Za-z0-9]+ [A-Z])'
477
- device_replacement: HTC $1
478
- - regex: 'HTC-([A-Za-z0-9]+)'
479
635
  device_replacement: 'HTC $1'
480
- - regex: 'HTC_([A-Za-z0-9]+)'
636
+ - regex: 'HTC[-_/\s]([A-Za-z0-9]+)'
481
637
  device_replacement: 'HTC $1'
482
- - regex: 'HTC ([A-Za-z0-9]+)'
483
- device_replacement: 'HTC $1'
484
- - regex: '(ADR[A-z0-9]+)'
638
+ - regex: '(ADR[A-Za-z0-9]+)'
485
639
  device_replacement: 'HTC $1'
486
640
  - regex: '(HTC)'
487
641
 
642
+ # Tesla Model S
643
+ - regex: '(QtCarBrowser)'
644
+ device_replacement: 'Tesla Model S'
645
+
646
+ # Samsung
647
+ - regex: '(SamsungSGHi560)'
648
+ device_replacement: 'Samsung SGHi560'
649
+
488
650
  #########
489
651
  # Ericsson - must come before nokia since they also use symbian
490
652
  #########
491
- - regex: 'SonyEricsson([A-z0-9]+)/'
653
+ - regex: 'SonyEricsson([A-Za-z0-9]+)/'
492
654
  device_replacement: 'Ericsson $1'
493
655
 
656
+ ##########
657
+ # PlayStation
658
+ # The Vita spoofs the Kindle
659
+ ##########
660
+ - regex: 'PLAYSTATION 3'
661
+ device_replacement: 'PlayStation 3'
662
+ - regex: '(PlayStation Portable)'
663
+ - regex: '(PlayStation Vita)'
664
+
665
+ ##########
666
+ # incomplete!
667
+ # Kindle
668
+ # http://amazonsilk.wordpress.com/useful-bits/silk-user-agent/
669
+ ##########
670
+ - regex: '(KFOT Build)'
671
+ device_replacement: 'Kindle Fire'
672
+ - regex: '(KFTT Build)'
673
+ device_replacement: 'Kindle Fire HD'
674
+ - regex: '(KFJWI Build)'
675
+ device_replacement: 'Kindle Fire HD 8.9" WiFi'
676
+ - regex: '(KFJWA Build)'
677
+ device_replacement: 'Kindle Fire HD 8.9" 4G'
678
+ - regex: '(Kindle Fire)'
679
+ - regex: '(Kindle)'
680
+ - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
681
+ device_replacement: 'Kindle Fire'
682
+
494
683
  #########
495
684
  # Android General Device Matching (far from perfect)
496
685
  #########
497
- - regex: 'Android[\- ][\d]+\.[\d]+\; [A-z]{2}\-[A-z]{2}\; WOWMobile (.+) Build'
498
- - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [A-z]{2}\-[A-z]{2}\; (.+) Build'
499
- - regex: 'Android[\- ][\d]+\.[\d]+\-update1\; [A-z]{2}\-[A-z]{2}\; (.+) Build'
500
- - regex: 'Android[\- ][\d]+\.[\d]+\; [A-z]{2}\-[A-z]{2}\; (.+) Build'
686
+ - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; WOWMobile (.+) Build'
687
+ - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
688
+ - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
689
+ - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+;[A-Za-z]{2}\-[A-Za-z]{2};(.+) Build'
690
+ - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
691
+ - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; (.+) Build'
692
+ - regex: 'Android[\- ][\d]+\.[\d]+; (.+) Build'
501
693
 
502
694
  ##########
503
695
  # NOKIA
@@ -505,6 +697,8 @@ device_parsers:
505
697
  ##########
506
698
  - regex: 'NokiaN([0-9]+)'
507
699
  device_replacement: 'Nokia N$1'
700
+ - regex: 'NOKIA([A-Za-z0-9\v-]+)'
701
+ device_replacement: 'Nokia $1'
508
702
  - regex: 'Nokia([A-Za-z0-9\v-]+)'
509
703
  device_replacement: 'Nokia $1'
510
704
  - regex: 'NOKIA ([A-Za-z0-9\-]+)'
@@ -517,14 +711,19 @@ device_parsers:
517
711
  device_replacement: 'Nokia'
518
712
 
519
713
  ##########
520
- # Blackberry
714
+ # BlackBerry
521
715
  # http://www.useragentstring.com/pages/BlackBerry/
522
716
  ##########
717
+ - regex: 'BB10; ([A-Za-z0-9\- ]+)\)'
718
+ device_replacement: 'BlackBerry $1'
523
719
  - regex: '(PlayBook).+RIM Tablet OS'
524
- device_replacement: 'Blackberry Playbook'
525
- - regex: '(Black[Bb]erry [0-9]+);'
720
+ device_replacement: 'BlackBerry Playbook'
721
+ - regex: 'Black[Bb]erry ([0-9]+);'
722
+ device_replacement: 'BlackBerry $1'
526
723
  - regex: 'Black[Bb]erry([0-9]+)'
527
724
  device_replacement: 'BlackBerry $1'
725
+ - regex: 'Black[Bb]erry;'
726
+ device_replacement: 'BlackBerry'
528
727
 
529
728
  ##########
530
729
  # PALM / HP
@@ -534,25 +733,24 @@ device_parsers:
534
733
  device_replacement: 'Palm Pre'
535
734
  - regex: '(Pixi)/(\d+)\.(\d+)'
536
735
  device_replacement: 'Palm Pixi'
537
- - regex: '(Touchpad)/(\d+)\.(\d+)'
538
- device_replacement: 'HP Touchpad'
539
- - regex: 'HPiPAQ([A-z0-9]+)/(\d+).(\d+)'
736
+ - regex: '(Touch[Pp]ad)/(\d+)\.(\d+)'
737
+ device_replacement: 'HP TouchPad'
738
+ - regex: 'HPiPAQ([A-Za-z0-9]+)/(\d+).(\d+)'
540
739
  device_replacement: 'HP iPAQ $1'
541
- - regex: 'Palm([A-z0-9]+)'
740
+ - regex: 'Palm([A-Za-z0-9]+)'
542
741
  device_replacement: 'Palm $1'
543
- - regex: 'Treo([A-z0-9]+)'
742
+ - regex: 'Treo([A-Za-z0-9]+)'
544
743
  device_replacement: 'Palm Treo $1'
545
744
  - regex: 'webOS.*(P160UNA)/(\d+).(\d+)'
546
745
  device_replacement: 'HP Veer'
547
746
 
548
747
  ##########
549
- # incomplete!
550
- # Kindle
748
+ # AppleTV
749
+ # No built in browser that I can tell
750
+ # Stack Overflow indicated iTunes-AppleTV/4.1 as a known UA for app available and I'm seeing it in live traffic
551
751
  ##########
552
- - regex: '(Kindle Fire)'
553
- - regex: '(Kindle)'
554
- - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
555
- device_replacement: 'Kindle Fire'
752
+ - regex: '(AppleTV)'
753
+ device_replacement: 'AppleTV'
556
754
 
557
755
  ##########
558
756
  # complete but probably catches spoofs
@@ -569,101 +767,113 @@ device_parsers:
569
767
  ##########
570
768
  # Acer
571
769
  ##########
572
- - regex: 'acer_([A-z0-9]+)_'
770
+ - regex: 'acer_([A-Za-z0-9]+)_'
573
771
  device_replacement: 'Acer $1'
574
- - regex: 'acer_([A-z0-9]+)_'
772
+ - regex: 'acer_([A-Za-z0-9]+)_'
575
773
  device_replacement: 'Acer $1'
576
774
 
775
+ ##########
776
+ # Alcatel
777
+ ##########
778
+ - regex: 'ALCATEL-([A-Za-z0-9]+)'
779
+ device_replacement: 'Alcatel $1'
780
+ - regex: 'Alcatel-([A-Za-z0-9]+)'
781
+ device_replacement: 'Alcatel $1'
782
+
577
783
  ##########
578
784
  # Amoi
579
785
  ##########
580
- - regex: 'Amoi\-([A-z0-9]+)'
786
+ - regex: 'Amoi\-([A-Za-z0-9]+)'
581
787
  device_replacement: 'Amoi $1'
582
- - regex: 'AMOI\-([A-z0-9]+)'
788
+ - regex: 'AMOI\-([A-Za-z0-9]+)'
583
789
  device_replacement: 'Amoi $1'
584
790
 
585
791
  ##########
586
792
  # Amoi
587
793
  ##########
588
- - regex: 'Asus\-([A-z0-9]+)'
794
+ - regex: 'Asus\-([A-Za-z0-9]+)'
589
795
  device_replacement: 'Asus $1'
590
- - regex: 'ASUS\-([A-z0-9]+)'
796
+ - regex: 'ASUS\-([A-Za-z0-9]+)'
591
797
  device_replacement: 'Asus $1'
592
798
 
593
799
  ##########
594
800
  # Bird
595
801
  ##########
596
- - regex: 'BIRD\-([A-z0-9]+)'
802
+ - regex: 'BIRD\-([A-Za-z0-9]+)'
597
803
  device_replacement: 'Bird $1'
598
- - regex: 'BIRD\.([A-z0-9]+)'
804
+ - regex: 'BIRD\.([A-Za-z0-9]+)'
599
805
  device_replacement: 'Bird $1'
600
- - regex: 'BIRD ([A-z0-9]+)'
806
+ - regex: 'BIRD ([A-Za-z0-9]+)'
601
807
  device_replacement: 'Bird $1'
602
808
 
603
809
  ##########
604
810
  # Dell
605
811
  ##########
606
- - regex: 'Dell ([A-z0-9]+)'
812
+ - regex: 'Dell ([A-Za-z0-9]+)'
607
813
  device_replacement: 'Dell $1'
608
814
 
609
815
  ##########
610
816
  # DoCoMo
611
817
  ##########
612
- - regex: 'DoCoMo/2\.0 ([A-z0-9]+)'
818
+ - regex: 'DoCoMo/2\.0 ([A-Za-z0-9]+)'
613
819
  device_replacement: 'DoCoMo $1'
614
- - regex: '([A-z0-9]+)\_W\;FOMA'
820
+ - regex: '([A-Za-z0-9]+)_W\;FOMA'
615
821
  device_replacement: 'DoCoMo $1'
616
- - regex: '([A-z0-9]+)\;FOMA'
822
+ - regex: '([A-Za-z0-9]+)\;FOMA'
617
823
  device_replacement: 'DoCoMo $1'
618
824
 
619
825
  ##########
620
- # Huawei Vodafone
826
+ # Huawei
621
827
  ##########
622
- - regex: 'vodafone([A-z0-9]+)'
828
+ - regex: 'Huawei([A-Za-z0-9]+)'
829
+ device_replacement: 'Huawei $1'
830
+ - regex: 'HUAWEI-([A-Za-z0-9]+)'
831
+ device_replacement: 'Huawei $1'
832
+ - regex: 'vodafone([A-Za-z0-9]+)'
623
833
  device_replacement: 'Huawei Vodafone $1'
624
834
 
625
835
  ##########
626
836
  # i-mate
627
837
  ##########
628
- - regex: 'i\-mate ([A-z0-9]+)'
838
+ - regex: 'i\-mate ([A-Za-z0-9]+)'
629
839
  device_replacement: 'i-mate $1'
630
840
 
631
841
  ##########
632
842
  # kyocera
633
843
  ##########
634
- - regex: 'Kyocera\-([A-z0-9]+)'
844
+ - regex: 'Kyocera\-([A-Za-z0-9]+)'
635
845
  device_replacement: 'Kyocera $1'
636
- - regex: 'KWC\-([A-z0-9]+)'
846
+ - regex: 'KWC\-([A-Za-z0-9]+)'
637
847
  device_replacement: 'Kyocera $1'
638
848
 
639
849
  ##########
640
850
  # lenovo
641
851
  ##########
642
- - regex: 'Lenovo\-([A-z0-9]+)'
852
+ - regex: 'Lenovo\-([A-Za-z0-9]+)'
643
853
  device_replacement: 'Lenovo $1'
644
- - regex: 'Lenovo\_([A-z0-9]+)'
854
+ - regex: 'Lenovo_([A-Za-z0-9]+)'
645
855
  device_replacement: 'Lenovo $1'
646
856
 
647
857
  ##########
648
858
  # lg
649
859
  ##########
650
- - regex: 'LG/([A-z0-9]+)'
860
+ - regex: 'LG/([A-Za-z0-9]+)'
651
861
  device_replacement: 'LG $1'
652
- - regex: 'LG-LG([A-z0-9]+)'
862
+ - regex: 'LG-LG([A-Za-z0-9]+)'
653
863
  device_replacement: 'LG $1'
654
- - regex: 'LGE-LG([A-z0-9]+)'
864
+ - regex: 'LGE-LG([A-Za-z0-9]+)'
655
865
  device_replacement: 'LG $1'
656
- - regex: 'LGE VX([A-z0-9]+)'
866
+ - regex: 'LGE VX([A-Za-z0-9]+)'
657
867
  device_replacement: 'LG $1'
658
- - regex: 'LG ([A-z0-9]+)'
868
+ - regex: 'LG ([A-Za-z0-9]+)'
659
869
  device_replacement: 'LG $1'
660
- - regex: 'LGE LG\-AX([A-z0-9]+)'
870
+ - regex: 'LGE LG\-AX([A-Za-z0-9]+)'
661
871
  device_replacement: 'LG $1'
662
- - regex: 'LG\-([A-z0-9]+)'
872
+ - regex: 'LG\-([A-Za-z0-9]+)'
663
873
  device_replacement: 'LG $1'
664
- - regex: 'LGE\-([A-z0-9]+)'
874
+ - regex: 'LGE\-([A-Za-z0-9]+)'
665
875
  device_replacement: 'LG $1'
666
- - regex: 'LG([A-z0-9]+)'
876
+ - regex: 'LG([A-Za-z0-9]+)'
667
877
  device_replacement: 'LG $1'
668
878
 
669
879
  ##########
@@ -677,36 +887,61 @@ device_parsers:
677
887
  ##########
678
888
  # motorola
679
889
  ##########
680
- - regex: '(Motorola)\-([A-z0-9]+)'
681
- - regex: 'MOTO\-([A-z0-9]+)'
890
+ - regex: '(Motorola)\-([A-Za-z0-9]+)'
891
+ - regex: 'MOTO\-([A-Za-z0-9]+)'
682
892
  device_replacement: 'Motorola $1'
683
- - regex: 'MOT\-([A-z0-9]+)'
893
+ - regex: 'MOT\-([A-Za-z0-9]+)'
684
894
  device_replacement: 'Motorola $1'
895
+
896
+ ##########
897
+ # nintendo
898
+ ##########
899
+ - regex: '(Nintendo WiiU)'
900
+ device_replacement: 'Nintendo Wii U'
901
+ - regex: 'Nintendo (DS|3DS|DSi|Wii);'
902
+ device_replacement: 'Nintendo $1'
685
903
 
904
+ ##########
905
+ # pantech
906
+ ##########
907
+ - regex: 'Pantech([A-Za-z0-9]+)'
908
+ device_replacement: 'Pantech $1'
909
+
686
910
  ##########
687
911
  # philips
688
912
  ##########
689
- - regex: 'Philips([A-z0-9]+)'
913
+ - regex: 'Philips([A-Za-z0-9]+)'
690
914
  device_replacement: 'Philips $1'
691
- - regex: 'Philips ([A-z0-9]+)'
915
+ - regex: 'Philips ([A-Za-z0-9]+)'
692
916
  device_replacement: 'Philips $1'
693
917
 
694
918
  ##########
695
919
  # Samsung
696
920
  ##########
697
- - regex: 'SAMSUNG-([A-z0-9\-]+)'
921
+ - regex: 'SAMSUNG-([A-Za-z0-9\-]+)'
698
922
  device_replacement: 'Samsung $1'
699
- - regex: 'SAMSUNG\; ([A-z0-9\-]+)'
923
+ - regex: 'SAMSUNG\; ([A-Za-z0-9\-]+)'
700
924
  device_replacement: 'Samsung $1'
701
925
 
926
+ ##########
927
+ # Sega
928
+ ##########
929
+ - regex: 'Dreamcast'
930
+ device_replacement: 'Sega Dreamcast'
931
+
702
932
  ##########
703
933
  # Softbank
704
934
  ##########
705
- - regex: 'Softbank/1\.0/([A-z0-9]+)'
935
+ - regex: 'Softbank/1\.0/([A-Za-z0-9]+)'
706
936
  device_replacement: 'Softbank $1'
707
- - regex: 'Softbank/2\.0/([A-z0-9]+)'
937
+ - regex: 'Softbank/2\.0/([A-Za-z0-9]+)'
708
938
  device_replacement: 'Softbank $1'
709
939
 
940
+ ##########
941
+ # WebTV
942
+ ##########
943
+ - regex: '(WebTV)/(\d+).(\d+)'
944
+
710
945
  ##########
711
946
  # Generic Smart Phone
712
947
  ##########
@@ -716,13 +951,13 @@ device_parsers:
716
951
  ##########
717
952
  # Generic Feature Phone
718
953
  ##########
719
- - regex: '^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\-|airn|alav|asus|attw|au\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\-n|bw\-u|beck|benq|bilb|blac|c55/|cdm\-|chtm|capi|comp|cond|craw|dall|dbte|dc\-s|dica|ds\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\-|fly\_|g\-mo|g1 u|g560|gf\-5|grun|gene|go.w|good|grad|hcit|hd\-m|hd\-p|hd\-t|hei\-|hp i|hpip|hs\-c|htc |htc\-|htca|htcg)'
954
+ - regex: '^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\-|airn|alav|asus|attw|au\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\-n|bw\-u|beck|benq|bilb|blac|c55/|cdm\-|chtm|capi|comp|cond|craw|dall|dbte|dc\-s|dica|ds\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\-|fly_|g\-mo|g1 u|g560|gf\-5|grun|gene|go.w|good|grad|hcit|hd\-m|hd\-p|hd\-t|hei\-|hp i|hpip|hs\-c|htc |htc\-|htca|htcg)'
720
955
  device_replacement: 'Generic Feature Phone'
721
- - regex: '^(htcp|htcs|htct|htc\_|haie|hita|huaw|hutc|i\-20|i\-go|i\-ma|i230|iac|iac\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\-|klon|lexi|lg g|lg\-a|lg\-b|lg\-c|lg\-d|lg\-f|lg\-g|lg\-k|lg\-l|lg\-m|lg\-o|lg\-p|lg\-s|lg\-t|lg\-u|lg\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\-|lge/|lynx|leno|m1\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\-|nem\-|newg|neon)'
956
+ - regex: '^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\-20|i\-go|i\-ma|i230|iac|iac\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\-|klon|lexi|lg g|lg\-a|lg\-b|lg\-c|lg\-d|lg\-f|lg\-g|lg\-k|lg\-l|lg\-m|lg\-o|lg\-p|lg\-s|lg\-t|lg\-u|lg\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\-|lge/|lynx|leno|m1\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\-|nem\-|newg|neon)'
722
957
  device_replacement: 'Generic Feature Phone'
723
958
  - regex: '^(netf|noki|nzph|o2 x|o2\-x|opwv|owg1|opti|oran|ot\-s|p800|pand|pg\-1|pg\-2|pg\-3|pg\-6|pg\-8|pg\-c|pg13|phil|pn\-2|pt\-g|palm|pana|pire|pock|pose|psio|qa\-a|qc\-2|qc\-3|qc\-5|qc\-7|qc07|qc12|qc21|qc32|qc60|qci\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\-|scp\-|sdk/|se47|sec\-|sec0|sec1|semc|sgh\-|shar|sie\-|sk\-0|sl45|slid|smb3|smt5|sp01|sph\-|spv |spv\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\-mo|t218|t250|t600|t610|t618|tcl\-|tdg\-|telm|tim\-|ts70|tsm\-|tsm3|tsm5|tx\-9|tagt)'
724
959
  device_replacement: 'Generic Feature Phone'
725
- - regex: '^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\-|your|zte\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\-|webc|whit|wmlb|xda\-|xda\_)'
960
+ - regex: '^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\-|your|zte\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\-|webc|whit|wmlb|xda\-|xda_)'
726
961
  device_replacement: 'Generic Feature Phone'
727
962
 
728
963
  ##########
@@ -730,3 +965,4 @@ device_parsers:
730
965
  ##########
731
966
  - regex: '(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\-webcrawler|converacrawler|dataparksearch|findlinks)'
732
967
  device_replacement: 'Spider'
968
+