none
URL 检查问题 RRS feed

  • 问题

  • 在对URL的合法性检查的时候,我用了MSDN提供的方法,但是不成功。大家帮我看看哪的问题。

    MSDN上的正规表现:^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$

    我的代码:
    Regex regex = new System.Text.RegularExpressions.Regex(@"^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$");

    if (!regex.IsMatch(tbURL.Text.Trim()))
    {
         throw new Exception("URL不正");
    }

    测试的URL:
    http://www.google.cn/search?hl=zh-CN&q=abc&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=

    2009年11月2日 2:21

答案

  • string pattern = @"((http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*)";
    string input = "http://www.google.cn/search?hl=zh-CN&q=abc&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=";
    bool b = Regex.IsMatch(input, pattern); //b = true;
    是对的呀!

    知识改变命运,奋斗成就人生!
    2009年11月2日 2:34
    版主

全部回复

  • string pattern = @"((http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*)";
    string input = "http1://www.google.cn/search?hl=zh-CN&q=abc&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=";
    
    bool b = Regex.IsMatch(input, pattern);

    知识改变命运,奋斗成就人生!
    2009年11月2日 2:27
    版主
  • string pattern = @"((http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*)";
    string input = "http://www.google.cn/search?hl=zh-CN&q=abc&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=";
    bool b = Regex.IsMatch(input, pattern); //b = true;
    是对的呀!

    知识改变命运,奋斗成就人生!
    2009年11月2日 2:34
    版主
  • string pattern = @"((http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*)";
    
    string input = "http1://www.google.cn/search?hl=zh-CN&q=abc&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=";
    
    
    
    bool b = Regex.IsMatch(input, pattern);
    
    

    知识改变命运,奋斗成就人生!

    有别的问题,比如域名是co.jp结尾的话就不行。
    2009年11月2日 2:36
  • string pattern = @"((http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*)";
    
    string input = "http://www.google.cn/search?hl=zh-CN&q=abc&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=";
    
    bool b = Regex.IsMatch(input, pattern); //b = true;
    
    
    是对的呀!

    知识改变命运,奋斗成就人生!

    刚才没测试好,看错了。。。但是还是有别的问题。
    2009年11月2日 2:39
  • string pattern = @"((http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|jp|[0-9]{1,3})(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*)";
    string input = "http://www.sample.co.jp";
    bool b = Regex.IsMatch(input, pattern);

    知识改变命运,奋斗成就人生!
    2009年11月2日 2:46
    版主
  • 你还可以使用
    try
    {
    Uri myUri = new Uri(url);
    }

    或者

    Uri.TryCreate 方法 

    来直接判断

    【孟子E章】
    2009年11月2日 2:50
    版主
  • try
    {
    Uri myUri = new Uri(url);
    }
    和Uri.TryCreate 方法 判断不了这种错误:[httpaa://aa]

    X.X.Y版主的方法好像在域名判断那有一点局限性。
    • 已编辑 taotaofengwu 2009年11月2日 3:11 有别的问题
    2009年11月2日 3:05
  • 可以再借用String.StartsWith方法处理,
    【孟子E章】
    2009年11月2日 3:27
    版主
  • try
    {
        Uri myUri = new Uri(url);
    }
    这个方法几乎检测不了什么错误。

    我把正则表达式改成了^(ht|f)tp(s?)\:\/\/[\w]([-.\w]*[\w])*(:(0-9)*)*(\/?)([\w\=\&\-\.\?\,\'\/\\\+&%\$#]*)?$

    不知道会不会有什么问题
    2009年11月5日 1:11