<script type="text/javascript">
<!--
document.write(window.navigator.appCodeName);
// -->
</script>
<script type="text/javascript">
<!--
document.write(window.navigator.appName);
// -->
</script>
<script type="text/javascript">
<!--
document.write(window.navigator.appVersion);
// -->
</script>
<script type="text/javascript">
<!--
document.write(window.navigator.userAgent);
// -->
</script>
Internet Explorer (IE) の場合 Qxxxxxx や Txxxxxx(xxxxxx は数字)が表示されることがありますが、これは IE の修正パッチを入れると表示されます。
<script type="text/javascript"> <!-- var ua = navigator.userAgent; if (ua.match(/Opera|OPR\//)) { var type = (ua.match(/Mini|Mobi|Tablet/)) ? "Opera Mobile" : "Opera"; if (ua.match(/Mini\/([\.\d]+)/)) { document.write("Opera Mini " + RegExp.$1); } else if (ua.match(/OPR\/([\.\d]+)/)) { document.write(type + " " + RegExp.$1); } else if (ua.match(/Version\/([\.\d]+)/)) { document.write(type + " " + RegExp.$1); } else if (ua.match(/Opera[\/\s]([\.\d]+)/)) { document.write(type + " " + RegExp.$1); } else { document.write(type); } } else if (ua.match(/MSIE (\d+\.\d+)/)) { if (ua.match(/Trident\/4\.0/)) { document.write("Internet Explorer 8.0"); } else { document.write("Internet Explorer " + RegExp.$1); } } else if (ua.match(/Trident/) && ua.match(/rv:([\.\d]+)/)) { document.write("Internet Explorer " + RegExp.$1); } else if (ua.match(/Edge?\/([\.\d]+)/)) { document.write("Microsoft Edge " + RegExp.$1); } else if (ua.match(/Edg(iOS|A)\/([\.\d]+)/)) { document.write("Mobile Microsoft Edge " + RegExp.$2); } else if (ua.match(/Mozilla\/(4\.[5678]\d?)/)) { document.write("Netscape Communicator " + RegExp.$1); } else if (ua.match(/Netscape6?\/([\.\d]+)/)) { document.write("Netscape " + RegExp.$1); } else if (ua.match(/Shiira\/([\.\d]+)/)) { document.write("Shiira " + RegExp.$1); } else if (ua.match(/Vivaldi\/([\.\d]+)/)) { document.write("Vivaldi " + RegExp.$1); } else if (ua.match(/Chrome|CrMo/)) { var type = (ua.match(/Android|CrMo|Mobile|Tablet/)) ? "Mobile Google Chrome" : "Google Chrome"; if (ua.match(/(Chrome|CrMo)\/([\.\d]+)/)) { document.write(type + " " + RegExp.$2); } else { document.write(type); } } else if (ua.match(/Safari/)) { var type = (ua.match(/Mobile/)) ? "Mobile Safari" : "Safari"; if (ua.match(/OPiOS\/([\.\d]+)/)) { document.write("Opera Mini " + RegExp.$1); } else if (ua.match(/CriOS\/([\.\d]+)/)) { document.write("Chrome for iOS " + RegExp.$1); } else if (ua.match(/FxiOS\/([\.\d]+)/)) { document.write("Firefox for iOS " + RegExp.$1); } else if (ua.match(/GSA\/([\.\d]+)/)) { document.write("Google Search App " + RegExp.$1); } else if (ua.match(/Version\/([\.\d]+)/)) { document.write(type + " " + RegExp.$1); } else if (ua.match(/Safari\/([\.\d]+)/)) { document.write(type + " " + RegExp.$1); } else { document.write(type); } } else if (ua.match(/Gecko/)) { var type = (ua.match(/Mobile|Tablet/)) ? "Mobile " : ""; if (ua.match(/Camino\/([\.\d]+)/)) { document.write("Camino " + RegExp.$1); } else if (ua.match(/SeaMonkey\/([\.\d]+)/)) { document.write("SeaMonkey " + RegExp.$1); } else if (ua.match(/PaleMoon\/([\.\d]+)/i)) { document.write(type + "Pale Moon " + RegExp.$1); } else if (ua.match(/Cyberfox\/([\.\d]+)/)) { document.write("Cyberfox " + RegExp.$1); } else if (ua.match(/Waterfox\/([\.\d]+)/)) { document.write(type + "Waterfox " + RegExp.$1); } else if (ua.match(/(Firebird|Firefox)\/([\.\d]+)/)) { document.write(type + "Mozilla " + RegExp.$1 + " " + RegExp.$2); } else if (ua.match(/Thunderbird\/([\.\d]+)/)) { document.write("Mozilla Thunderbird " + RegExp.$1); } else if (ua.match(/rv:([\.\d]+)/)) { document.write("Mozilla " + RegExp.$1); } else { document.write("Mozilla"); } } else { document.write("N/A"); } // --> </script>
検索対象文字列.match(/←始まり 正規表現 終わり→/); として/ 〜〜 / 内に正規表現を使用してそれぞれのブラウザの名前とバージョンを検索して取得します。正規表現内に「$ ( ) * + - . / ? @ [ ] \ ^ { } |」を文字列として使用する場合は、これら文字の前にバックスラッシュ「\」を付けてエスケープさせます。なお、「-」は一番最初か最後に使用する場合のみエスケープ不要です。
正規表現にマッチした文字列や数値をあとから参照するには、参照したい正規表現を括弧で括ります。この括弧で括った正規表現は RegExp.$n で参照することができます。n は正規表現内の n 個目の括弧にマッチした文字列です。
なお、正規表現の拡張構文である (?:pattern) (?=pattern) (?!pattern) は OS の環境(Windows では JScript のバージョンが古いなど)や一部の古いブラウザは対応していない模様です。
Opera の場合は、他のブラウザとして振舞うことが簡単にできますので一番初めにチェックの対象にします。ユーザーエージェントに Opera という文字列があれば、スラッシュか空白文字のあとにバージョンがありますので、([\.\d]+) として「1文字以上のドットか数値」が続いている部分を参照します。これは、7.11 や 7.52 のような文字列にマッチします。また、Opera のバージョン 15 以降では Opera から OPR に変更されているので、OPR/ も判別の対象にします。
Internet Explorer の場合は、MSIE という文字列があるか判別します。MSIE という文字列があれば、空白文字のあとにバージョンがありますので、(\d+\.\d+) として「1文字以上の数値ドット1文字以上の数値」の順番に並んでいる部分を参照します。これは、5.01 や 5.12 や 6.0 のような文字列にマッチします。※Internet Explorer 8 で互換表示の場合は MSIE 7.0 になりますので、Trident/4.0 の文字列があれば Internet Explorer 8.0 としています。また、Internet Explorer 11 ではユーザーエージェントに変更があり、MSIE の文字列が無くなりましたので Trident の文字列があって rv: 以降の文字列で判別します。
Windows 10 のデフォルトブラウザとなる Microsoft Edge は Edge の文字列があるか判別します。また、Chromium ベースの Microsoft Edge では Edge から Edg に変更されているので、Edge? として Edg も判別の対象にします。Edge? の ? は直前の e があってもなくても良いということになりますので、Edg と Edge にマッチします。モバイル版では iOS は EdgiOS となり、Android は EdgA となるので、Edg の後に iOS か A があるか判別します。Web サイトから Microsoft Edge を検出する
Netscape Communicator の場合は、Mozilla/4.5 〜 Mozilla/4.8 があるか判別します。[5678] は 5 か 6 か 7 か 8 のいずれかにマッチするという意味です。これは [5-8] とすることもできます。最後の \d? は0文字か1文字の数値にマッチするという意味なので、数値があってもなくても良いということになります。よって、4.7 や 4.78 のような文字列にマッチします。
Netscape, Shiira, Vivaldi, Google Chrome, Safari の場合は、初めにブラウザ名を判別します。Netscape6? の 6? は先ほどの \d? と同様に 6 があってもなくても良いということです。バージョンを調べるためには ([\.\d]+) として「1文字以上のドットか数値」が続いている部分を参照します。これは、6.2.3 や 7.01 のような文字列にマッチします。
Mozilla の場合は、Gecko という文字列があるか判別します。Netscape, Shiira, Vivaldi, Google Chrome, Safari にも Gecko という文字列が含まれていますが、上記においてマッチしていますのでここの判別にはかかりません。Mozilla には Firefox(旧 Firebird)や Thunderbird(メールソフト)といった種類もありますので判別の対象にします。※Camino, SeaMonkey, Pale Moon, Cyberfox, Waterfox はついでなので判別対象にいれました。
この例では、ブラウザを検索して括弧内の正規表現でバージョンを参照して表示します。この方法を用いてブラウザ別に処理を振り分けることも可能ですが、振り分ける項目が多いのでブラウザ別に振り分けるを参照してください。また、OS の判別はこちらです。
以下は各ブラウザのユーザーエージェントの値です。(私が実際使用したブラウザの一部)
Opera/7.52 (Windows NT 5.0; U) [ja] Mozilla/4.78 (Windows NT 5.0; U) Opera 7.52 [ja] Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.52 [ja]
Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Mozilla/4.0 (compatible; MSIE 5.14; Mac_PowerPC) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Mozilla/4.78 [ja] (Windows NT 5.0; U)
Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:0.9.4.1) Gecko/20020508 Netscape6/6.2.3
Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)
Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.2) Gecko/20030401 for VineLinux 0vl0.26
Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.7.5) Gecko/20041108 Firefox/1.0