C# 登录页面URL的正则表达式?

C# 登录页面URL的正则表达式?,c#,.net,asp.net,regex,vb.net,C#,.net,Asp.net,Regex,Vb.net,现在,我有以下代码: string strURL = "aLogin.aspx?test=hello"; string strPattern = "(.*/)?Login.aspx(?.*)?"; bool bIsLoginPage = System.Text.RegularExpressions.Regex.IsMatch(strURL , strPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase); 我正在寻找合适

现在,我有以下代码:

string strURL = "aLogin.aspx?test=hello";
string strPattern = "(.*/)?Login.aspx(?.*)?";
bool bIsLoginPage = System.Text.RegularExpressions.Regex.IsMatch(strURL , strPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
我正在寻找合适的regexp模式,我不知所措

模式必须满足这些标准

Login.aspx              ==> True
lOgIn.AsPx              ==> True
/Login.aspx             ==> True
whatever/Login.aspx     ==> True
whatever/lOgIn.aSpX     ==> True
WhAtEverLogin.aspx      ==> false
Login.aspxxxxxx         ==> false
Login.aspx?xyz=abc&etc  ==> true
Login.aspxxyz=abc&etc   ==> false
Login.aspx&xyz=abc&etc  ==> false

你觉得这个怎么样

^(.*[/])?login.aspx([?].*)?$

当然是ignorecase。

你怎么看

^(.*[/])?login.aspx([?].*)?$

当然是ignorecase。

试试
string strPattern=“(^ |.*)Login.aspx($| \?*)”
bResult=System.Text.RegularExpressions.Regex.IsMatch(strURL、strPattern、RegexOptions.IgnoreCase)


编辑:修复丢失的转义序列

尝试
string strPattern=“(^ |.*/)Login.aspx($| \?*)”
bResult=System.Text.RegularExpressions.Regex.IsMatch(strURL、strPattern、RegexOptions.IgnoreCase)


编辑:修复丢失的转义序列

您可以不使用正则表达式:

var target = "Login.aspx";
strURL.Split('?').First().Split('/').Last().Equals(target, StringComparison.OrdinalIgnoreCase);

您可以不使用正则表达式:

var target = "Login.aspx";
strURL.Split('?').First().Split('/').Last().Equals(target, StringComparison.OrdinalIgnoreCase);

您试图实现什么?在第三方web门户的HTTP模块中确定当前URL是否为登录页。然后我保存username+sessionID+datetime。@Quandary,我希望这是针对一个特定的情况,您不希望每个登录页面的URL中都有“login”一词。我建议不要使用正则表达式,您应该使用类似于
HttpRequest.CurrentExecutionFilePath
的方法,然后使用字符串函数除去页面名称减去任何查询字符串值。然后,将
yourstring.ToLower()
与“login”进行比较。@Brad:一个非常具体的案例,与.NETFramework 1.1进行比较。我们需要一种安全的方法将门户标识传递给我们自己的表单解决方案。您试图实现什么?在第三方web门户的HTTP模块中确定当前URL是否为登录页。然后我保存username+sessionID+datetime。@Quandary,我希望这是针对一个特定的情况,您不希望每个登录页面的URL中都有“login”一词。我建议不要使用正则表达式,您应该使用类似于
HttpRequest.CurrentExecutionFilePath
的方法,然后使用字符串函数除去页面名称减去任何查询字符串值。然后,将
yourstring.ToLower()
与“login”进行比较。@Brad:一个非常具体的案例,与.NETFramework 1.1进行比较。我们需要一种安全的方法将门户标识传递给我们自己的表单解决方案。更正:“(^ |.*)Login.aspx($| \?.*)”是的,对不起,通常在regex前面加上@作为字符串前缀,在copy-pasteCorrection中变懒:“(^ |.*)Login.aspx($| \?*)”是的,抱歉,通常在regex前面加上@作为字符串前缀,在copy-pasteCorrection中变懒是的,是的,这就是我想做的。但首先,一个邪恶的人可以通过多个问号,其次,它可以有一个前缀,所以你需要endswith,第三,.NET 1.1没有实现StringComparison.OrdinalIgnoreCase,我不想花太多时间重新发明轮子。我也不会打赌第一个和最后一个会被实现。您的变体可以归结为string.contains和OrdinalingOreCase,我真的不想实现它,因为.NET 1.1不支持它,第二个原因是string.contains在这种情况下使用是不安全的。很遗憾,您不得不处理.NET 1.1。如果你提前检查刺的长度,多个问号其实不是什么大问题,无论如何你都应该这样做。我知道,First和Last在.NET2中不可用,所以1.1中肯定不可用。不管怎样,重要的是你找到了一个适合你的解决方案。是的,没错,这就是我想要做的。但首先,一个邪恶的人可以通过多个问号,其次,它可以有一个前缀,所以你需要endswith,第三,.NET 1.1没有实现StringComparison.OrdinalIgnoreCase,我不想花太多时间重新发明轮子。我也不会打赌第一个和最后一个会被实现。您的变体可以归结为string.contains和OrdinalingOreCase,我真的不想实现它,因为.NET 1.1不支持它,第二个原因是string.contains在这种情况下使用是不安全的。很遗憾,您不得不处理.NET 1.1。如果你提前检查刺的长度,多个问号其实不是什么大问题,无论如何你都应该这样做。我知道,First和Last在.NET2中不可用,所以1.1中肯定不可用。无论如何,重要的是你找到了一个适合你的解决方案。