2009-08-12 15 views
0

UserAgent文字列といくつかの正規表現を比較して、C#コードでブラウザを検出しようとしています。RegExを使用してASP.NETでブラウザを検出する

ただ、ASP.NETのHttpBrowserCapabilitiesオブジェクトを使用するのではなく、このアプローチを使用するのは、200のブラウザとそのOSに対応する200以上の正規表現のリストを受け取ったためです。私はより詳細な情報を得ることができます。私は正規表現マッチが成功することを期待していますが、何らかの理由で、試合はfalseを返します。この例では

var sampleUserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"; 
var ieRegEx = "/^Mozilla\/4.0 \(compatible; MSIE ([0-9\.]+); Windows/si"; 
var success = Regex.Match(sampleUserAgent, regEx.RegularExpression, RegexOptions.IgnoreCase).Success; 

は、ここでのサンプルです。正規表現が正しくないと推測しています。

私は正規表現を書いていませんでしたが、私はRegEx構文にはあまり慣れていないので、誰でも私が正規表現に何が間違っているのか理解できますか?

答えて

2

あなたは、C#で、このようなものを使用する必要があります。

string sampleUserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"; 
string ieRegEx = @"^Mozilla/4.0 \(compatible; MSIE ([0-9\.]+); Windows .*\)$"; 
bool success = Regex.Match(sampleUserAgent, ieRegEx, RegexOptions.IgnoreCase).Success; 

注意を私は単純型のためというよりも、VAR正しいタイプ識別子を使用して好みます。

また、私は個人的にはブラウザキャップを使用することに固執します。なぜなら、特にあなたがreg-exでうまくいかない場合は、面倒ではありません。

+0

確かにあなたが提案した正規表現は成功です。 "/"を "/"に置き換え、最後の "/ si"を "。* \)$"に置き換えました(途中で何を意味するのでしょうか?)。 これらの変更を200個程度の正規表現の文字列に適用して、それがIE正規表現だけでなく他のすべての問題を解決するかどうかを確認します。 – desautelsj

+0

^行の先頭にアンカーを付け、/スラッシュをエスケープする必要はありません(\はエスケープ文字です)。 $は行末に一致します。 *。任意の文字列に一致します。 http://regexlib.com/CheatSheet.aspx –

+0

cheatsheetへのリンクありがとうございます。非常に有益!最後の1つの質問:元の正規表現で "\ si"が何を意味するか考えていますか?私はチートシートにそれについて何の言及も見ません。文字列の最後には何文字も一致させるために "。* $"と置き換えていますが、元の正規表現の作成者の意図は理解できません。 – desautelsj

2

私はこれは直接質問に答えることはできませんが、私はあなたがこの問題に正規表現を使用して、より多くの問題を導入していると思います。本当に必要な情報が見つからない限り、HttpBrowserCapabilitiesを使用します。

+0

私はそれがもっと複​​雑に思えることに同意しますが、本当に興味がある理由は、私がこのウェブサイトを見つけたからです:http://user-agent-string.info/ それはすべての既知のブラウザまた、すべての既知のオペレーティングシステム。それは非常に詳細です。 – desautelsj

+0

私はBrowserCapsを非常に注意深く扱っていますが、ユーザエージェントはどちらも信頼できません。 – annakata

+0

@desautelsj注意してください。いくつかのエラーはありません... –

0

私はhere

^からこの正規表現を見つけました([^/[:スペース:]] )(/([^ [:スペース:]]))([[:?スペース: ]] [[a-zA-Z] [a-zA-Z]]) [[:スペース:]]?(\((([^()] |(\([^()] \))))\))[[:スペース:]] *

これはすべてのユーザーエージェントに一致するはずです。彼らはまた、より特定のユーザーエージェントのリストを持っています。

関連する問題