user_agent_parser 0.1.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
+