正規表現を明記せず、RegExp#exec を String#split にするとちょっとハッピーに
JavaScript の小ネタです。
UserAgent 文字列(window.navigator.userAgent)
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.814.0 Safari/535.1"
から、Windowsのバージョン(6.1)を取り出すようなコードをよく見かけますね。
ちょっと前の私は RegExp#exec + parseFloat で、こんな(↓)感じにしていたり、
function getWindowsVersion() { var m = /Windows NT (\d+(\.\d+)?)/.exec(navigator.userAgent); if (m) { return parseFloat(m[1]); } return 0; }
こんな(↓)感じにワンライナーにしちゃってましたが、
var version = parseFloat((/Windows NT (\d+(\.\d+)?)/.exec(navigator.userAgent) || [,0])[1]);
最近は、String#split + parseFloat で、もっとシンプルにしてるよ!
var version = parseFloat(navigator.userAgent.split("Windows NT")[1]) || 0;
正規表現やめちゃって文字列に。
切り出した文字列に含まれる空白は parseFloat(" 6.1") → 6.1 って感じにトリミングされるので、parseFloat にお任せしてます。
正規表現を明記しないことで、こんなにいいことが! 的なオマケ
IE10 からは、UserAgent に埋まっている Version 番号が二桁になりますね。
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)"
ブラウザのバージョン番号が二桁になるシーズンになると、各ブラウザベンダーのブログ(過去においてはIE や Opera のブログ)(おそらくは来年の Firefox のブログ)には、
「バージョン番号の取得に /MSIE (\d\.\d)/ のような一桁の数字しか取得できないコードが埋まってると、間違ったバージョンが取得されちゃうかもしれない…」なエントリが乗ったりするのですが、
String#split() + parseFloat で取得するようにすれば、いいんじゃないかな!? って思います!
Opera の userAgent に謎の Version番号(9.80) が埋まってるのも、これ(↑)が理由なんだよね
"Opera/9.80 (Windows NT 6.1; U; ja) Presto/2.9.168 Version/11.50"