2011-11-07 106 views
0

我有这样的字符串:一个行函数来替换字符在C#字符串

http://127.0.0.1:22/Test 

是否有可能使用,我可以使用,使删除冒号和端口号正则表达式一些功能单一。

有人曾建议我使用下列但是这是给我的问题,如果CURRENTURL为空!

var ip = new Uri((string)Session["CurrentUrl"]); 
var ipNoPort = string.Format("{0}://{1}/{2}", ip.Scheme, ip.Host, ip.PathAndQuery); 
return Session["CurrentUrl"] == null ? Home() : Redirect((string)ipNoPort); 

我真正需要的是一些方法,它结合了三条线并检查null。

+4

为什么你需要他们在同一行?究竟会解决什么问题?很可能你会得到一段很长且复杂的代码,这些代码很难调试。 – Oded

+0

事实上,就环绕代码与空CURRENTURL会话变量的检查。的 – Rickjaah

+1

可能重复[我怎样才能从C#字符串中删除一些字符?(http://stackoverflow.com/questions/7990920/how-can-i-remove-some-characters-from-ac-sharp-string) – V4Vendetta

回答

1

只是测试无效使用会话变量之前:

if(Session["CurrentUrl"] != null) 
{ 
    var ip = new Uri(Session["CurrentUrl"]); 
    var ipNoPort = string.Format("{0}://{1}/{2}", ip.Scheme, ip.Host, ip.PathAndQuery); 
    return Redirect(ipNoPort); 
} 

return Home(); 
0
url = Regex.Replace(url, @"^(http://([0-9]+\.?)+)(:[0-9]+)", "$1"); 
+0

感谢这个不错 –

+0

这将打破,如果有一些“123”这不是描述的端口 - 例如就像'http://sample.com/post.asp?text =我的+电话:555-123'! – Mario

+0

@Mario发生了变化。 –

0

你不能做到这一切在同一行(你可以,但仍然没有什么区别代码明智)。所以你不会首先检查null。

要删除的端口(不知道这是明智的,做的,取决于你的布局):

string url = (string) Session["CurrentUrl"]; 
string clean_url = url != null ? Regex.Replace(url, "://([^/:]+:\\d+)", "://$1") : Home(); 
0

只是为了一点点增加俄德的答案。

此以下行

var ip = new Uri((string)Session["CurrentUrl"]); 

将打破如果Session["CurrentUrl"]

  1. NULL(System.ArgumentNullException
  2. 不是字符串(System.InvalidCastException
  3. 不是包括空字符串的URL。 (System.UriFormatException

俄德的答案需要照顾的第一个也可能在你的代码的异常的唯一可能的原因,但除非你能绝对确保其始终null或URL,那么你可能会更好具有以下

var currentUrl = Session["CurrentUrl"] as string; 

if (!string.IsNullOrEmpty(currentUrl)) 
{ 
    try 
    { 
     var ip = new Uri(currentUrl); 
     var ipNoPort = string.Format("{0}://{1}/{2}", ip.Scheme, ip.Host, ip.PathAndQuery); 
     return Redirect(ipNoPort); 
    } 
    catch (System.UriFormatException) 
    { 
     return Home() 
    } 
} 
else 
{ 
     return Home(); 
} 

另一种选择是只赶上three exceptions at once但它更昂贵的,如果它发生了很多。

如果使用这个有很多它可能是值得创建一个UrlTryParse方法。