Ich habe eine einfache Klasse geschrieben, um zu überprüfen, ob Benutzeragenten eine Warnung für inkompatible Browser anzeigen. Ich mache diese Serverseite, ich weiß, dass es möglich ist, Client-Seite.
Okey zuerst, ich bin nicht viel gut für das Schreiben von Regexes ..
Ich habe eine Regex geschrieben, die nach Kleinbuchstaben sucht, gefolgt von der Versionsnummer.
Ich mache ein foreach()
mit einem Array etwas wie das:
Dies würde ergeben: Browser: "Firefox", version "23.0.6"
.
Ich fand das funktioniert für Firefox, MS IE und ältere Versionen von Opera. Einige Browser wie Safari und die neueren Versionen von Opera haben jedoch eine andere User-Agent-Zeichenfolge, die Version / x.x.x enthält, also
Nur um Ihnen eine Idee zu geben, hier sind 3 User-Agent-Strings und was ich brauche ist hervorgehoben.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14
Also in jeder von diesen die folgende menschliche Logik richtig:
Version/x.x.x
ist. Browsername/x.x.x
die Versionsnummer. Wenn Sie sich die erste und letzte User-Agent-Zeichenfolge oben ansehen, sehen Sie, dass Version
vor oder nach dem Browser-Namen stehen kann.
Kann mir jemand helfen, eine Regex für preg_match()
zu erstellen? Muss ich eine bedingte Anweisung verwenden oder kann ich nach optionalen Gruppierungen suchen? Ich bin ein bisschen verwirrt ..
Danke!
Bearbeiten 17-09-2013: Ich habe vergessen zu erwähnen, dass ich nicht get_browser()
verwenden möchte, sondern eine riesige Bibliothek verwendet, um die Fähigkeiten des Browsers zu erkennen usw. Ich brauche nur eine kurze "Whitelist" von Browsern, die einige Millisekunden anstatt ein paar hundert ms benötigen sollte, um die browse cap.ini Dateien zu lesen. Sonst wäre Georges Antwort die Antwort ..
Angesichts Ihrer handvoll Ergebnisse funktioniert das. Es wird vielleicht nicht in allen Fällen, aber es wird Ihre Bearbeitungszeit drastisch reduzieren.
Ich würde einen einzigen regulären Ausdruck verwenden, um die Version zu extrahieren:
%Vor% Und da Sie nur nach einer Handvoll exakter Zeichenketten suchen, können Sie php's stripos()
verwenden, um nach der Browser-Zeichenkette zu suchen.
Die Vorteile einer solchen Vorgehensweise sind unmittelbar:
stripos()
ist bei der Verarbeitung von regulären regulären Ausdrücken wesentlich schneller. Sie können hier auch mit der Regex herumspielen: Ссылка
Haben Sie schon von browscap gehört und get_browser()
? Bei meiner Installation:
Um es zu benutzen, schnappen Sie sich eine Kopie einer PHP-Version von browscap.ini von hier (zB php_browscap.ini
), Referenz es in php.ini
unter der browscap
Direktive, und du bist gut zu gehen.
Diese Klasse / Funktion macht einen schönen Job:
%Vor%Ich habe das mit einem iPhone und einer Oper getestet. Gleichzeitig erhalten Sie das Betriebssystem, auf dem der Browser läuft.)
Bearbeiten:
Ich kann sehen, dass diese Funktion ein eigenes Git Repo hat. Verwenden Sie dies, wie dies aktualisiert und gepflegt wird:
Tags und Links php regex pcre version user-agent