0

OS名、IEブラウザー検出の問題に直面しているブラウザーdaetilsなどのクライアントデバイスの詳細を判断するために、いくつかの正規表現を作成しようとしました。

ブラウザ検出のコード:

 public static final BrowserBean getBrowserInfo(String userAgent){
    BrowserBean browserBean = new BrowserBean();
    Pattern pattern = Pattern.compile("(?i)(opera|chrome|safari|firefox|MSIE|trident)(\\s|\\/)(\\d+.\\d+)");
    Matcher matcher = pattern.matcher(userAgent);
    while (matcher.find()) {
        int groupCount = matcher.groupCount();
        if(groupCount >= 3){
        browserBean.setBrowserName(matcher.group(1));
        browserBean.setBrowserVersion(matcher.group(3));
        }
      }
    return browserBean; 
    }

テストケース:

 @Test
    public void detectSafaritest() {
    String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.71 (KHTML, like Gecko) Version/6.1 Safari/537.71";
    BrowserBean bean =  UserAgentDetermination.getBrowserInfo(userAgent);
    Assert.assertEquals("Safari", bean.getBrowserName());
    Assert.assertEquals("537.71", bean.getBrowserVersion());
    }

    @Test
    public void detectIEtest() {
    String userAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MASP)";
    BrowserBean bean =  UserAgentDetermination.getBrowserInfo(userAgent);
    Assert.assertEquals("InterNet Explorer", bean.getBrowserName());
    Assert.assertEquals("10.0", bean.getBrowserVersion());
    }

    @Test
    public void detectFireFoxtest() {
    String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0";
    BrowserBean bean =  UserAgentDetermination.getBrowserInfo(userAgent);
    Assert.assertEquals("Firefox", bean.getBrowserName());
    Assert.assertEquals("25.0", bean.getBrowserVersion());
    }

//    @Test
//    public void detectOperatest() {
//  String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.71 (KHTML, like Gecko) Version/6.1 Safari/537.71";
//  BrowserBean bean =  UserAgentDetermination.getBrowserInfo(userAgent);
//  Assert.assertEquals("Safari", bean.getBrowserName());
//  Assert.assertEquals("537.71", bean.getBrowserVersion());
//    }

    @Test
    public void detectChrometest() {
    String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36";
    BrowserBean bean =  UserAgentDetermination.getBrowserInfo(userAgent);
    Assert.assertEquals("Chrome", bean.getBrowserName());
    Assert.assertEquals("30.0", bean.getBrowserVersion());
    }

ユーザー エージェントが次のように印刷されていることがわかるため、IE とトライデント ブラウザーに問題があります。 Trident/7.0; rv:11.0) Gecko など

IEのすべてのバージョンを正しく識別するのを手伝ってください。

デバイス情報についても助けていただければ幸いです。

4

2 に答える 2

-1

あなたの正規表現は問題ありません。問題は assert ステートメントにあります。IE の場合、文字列には "MSIE" が含まれており、それが探している (そして返されている) ものです。しかし、あなたの assert ステートメントは文字列 "InterNet Explorer" を探しています

ただし、マイナーな点が 1 つあります。正規表現の最後の部分は、実際(\\d+\\.\\d+)には(\\d+.\\d+). そうすれ.ば、単一の文字ではなくリテラルに一致します。

于 2013-11-08T19:26:02.767 に答える