我有代码返回有关用户代理的信息。我想找到说MSIE 10.0
的部分,如果是,则将Internet Explorer 10.0
写入日志文件。没有正则表达式,有没有办法做到这一点?如果有必要,我会使用它们,我也不知道这个字符串是否总是相同的长度,所以我不认为子字符串是一致的。
浏览器:Mozilla / 5.0(兼容; MSIE 10.0; Windows NT 6.1; 三叉戟/ 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)
这是返回字符串的代码:
var js = driver as IJavaScriptExecutor;
const string script = "return navigator.userAgent"; // get the user agent
if (js != null)
{
var userAgent = (string) js.ExecuteScript(script);
Logger.Log(Loglevel.Debug, "Brower: {0}", userAgent);
}
答案 0 :(得分:3)
您可以简单地调用Contains来检查指定的字符串是否包含另一个字符串:
if (userAgent.Contains("MSIE 10.0")){
...
}
答案 1 :(得分:2)
您可以尝试在用户代理字符串上使用string.Contains()调用。
bool contains = userAgent.Contains("MSIE 10.0");
if(contains)
{
//whatever
}
简单,没有正则表达式。我在一些不同的项目中使用它,工作正常。但如果您要查找的字符串发生变化,请注意误报。
答案 2 :(得分:2)
if(userAgent.Contains("MSIE 10.0"))
File.AppendAllText("Logfilepath","InternetExplorer 10.0");
答案 3 :(得分:2)
System.String提供Contains方法,如果您搜索的特定字符串存在于调用Contains的字符串中,则该方法将返回true。
如果您想避免在日志语句中对浏览器版本进行硬编码,您仍然可以使用Substring和IndexOf来获取值...以下代码将记录:& #34;浏览器:Internet Explorer 10.0",假设userAgent的值为
" Mozilla / 5.0(兼容; MSIE 10.0; Windows NT 6.1; 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)"
if (userAgent.Contains("MSIE"))
{
int index = userAgent.IndexOf("MSIE") + 5; // + length of("MSIE ")
int length = userAgent.IndexOf(';', index) - index;
Logger.Log(Loglevel.Debug, "Browser: Internet Explorer {0}",
userAgent.Substring(index, length));
}
第一个IndexOf将在" MSIE"之后检索userAgent的索引超过空格。第二个IndexOf使用该索引作为查找下一个分号的起点;这两个指数差异的长度。此时,Substring调用将返回userAgent字符串中与MSIE关联的版本号。