环境:asp.net mvc问题:当用户回复时:将字符中出现的有效url地址还有mail自动加上超链接。假设字符串样例:str="图文:没有声音,再好的戏也出不来,说说Win7声卡驱动! - 博客<br />http://www.xxx.com/a/b/c.html?d=255 如果需要帮助请联系我:[email protected]<br /> 有问题可以到www.csdn.net提问"难点:用户回复当中的url地址可以包含http,ftp也可能只有域名,也可能带参数,而且字符串的url、mail前后中还有可能包含html符号、数字、英文等等,用C#正则如何实现判断并加上超链接?下面这段是搜索来的,无法正确判断链接结尾。
//var reg = /[0-9a-zA-z]+.(html|htm|shtml|jsp|asp|php|com|cn|net|com.cn|org)$/;
//必须包含.(最后面一个.前面最少有一个字符)且.后面最少有一个单词字符,最后一个字符必须为单词字符或/
var reg = /\w+.(\w+|\w+\/)$/;
var isurl = reg.test(str); //test(str)方法是js正确表达式内置的对象可以直接调用
    return isurl;
谢谢各位老师!

解决方案 »

  1.   

    验证电子邮件(验证 MSN号一样)
    表达式 \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    描述 注意MSN用非hotmail.com邮箱也可以
    匹配的例子 [email protected]
    不匹配的例子 111@1. http://www.svnhost.cn/
      

  2.   

    验证网址(带?id=中文)VS.NET2005无此功能
     
    表达式 ^http:\/\/([\w-]+(\.[\w-]+)+(\/[\w- .\/\?%&=\u4e00-\u9fa5]*)?)?$
     
    描述 验证带?id=中文
    匹配的例子 http://www.svnhost.cn/,
    http://www.svnhost.cn/?id=小灰
    不匹配的例子
      

  3.   

    MSDNXGH现在的难点是,无法正确匹配到链接的结尾。
    测试var reg = /\w+.(\w+|\w+\/)$/;的时候,他直接匹配到回复的最后了。如果链接后面有空格还行。如果是英文数字什么的符号都的,都给匹配进去了。
      

  4.   

    链接地址不一定带扩展名和参数的string url = "测试测试测试测试http://www.sina.com/tech/test1213.html?date%20=1234 测试测试<img></img>http://www.163.com/sf23/?time%20=4567 测试测试测试测试";
    MatchCollection mc = new Regex(@"(?is)(http|ftp)://(\w+[\./]?)*(\.(html|htm|aspx|asp|php))?[\w\?\=&%]*").Matches(url);
    mc.Cast<Match>().ToList().ForEach(m => Response.Write(m.Value + "<br />"));
    /*
    http://www.sina.com/tech/test1213.html?date%20=1234
    http://www.163.com/sf23/?time%20=4567
    */如果链接后面没有空格将把后面的“测试”匹配上,这个太恶心
      

  5.   

    word中好像就是后面敲空格才会自动加链接的
    再看看有没别的办法
      

  6.   

    是吗,我试了一下,QQ的确可以自动链接,但是有很大的问题
    比如我随便输入:
    http://www.123123.fdsfsf/测试地址.htm?i=1
    http://www.123123.fdsfsf/测试地址
    它最后出来的链接地址都是:http://www.123123.fdsfsf/这一个
    可是如果用户这时候它就是需要http://www.123123.fdsfsf/测试地址.htm?i=1这样的地址呢?灵活就要有代价,就算不是中文,对于这样的地址
    http://www.123123.fdsfsf/fsf131hello
    有可能地址是:http://www.123123.fdsfsf/fsf131
    也有可能是http://www.123123.fdsfsf/fsf131hello
    最后一个/后面除非你用空格、换行或者粘贴时利用JS对用户输入进行检测,否则你根本不知道要在何时结束
      

  7.   

    正则表达式:
    ((http://)?|(ftp://)?)www.*.html(\?d=[0-9]*)?
    可得到你提供的url地址,比如红色部分:
     图文:没有声音,再好的戏也出不来,说说Win7声卡驱动! - 博客<br />http://www.xxx.com/a/b/c.html?d=255 如果需要帮助请联系我:[email protected]<br /> 有问题可以到www.csdn.net提问
    图文:没有声音,再好的戏也出不来,说说Win7声卡驱动! - 博客<br />ftp://www.xxx.com/a/b/c.html?d=255 如果需要帮助请联系我:[email protected]<br /> 有问题可以到www.csdn.net提问等等
    应该符合你的要求。
      

  8.   

    当然你大可以像QQ那样一棒子把客户夯死,QJ他
      

  9.   


    刚才在QQ测试这个:http://topic.csdn.net/u/20110415/17/56321eb3-1639-4e22-a3bc-6ac4a6a931b0.html?60745大师傅一梆梆一所得税254发出去后,就能正确匹配
      

  10.   

    这类问题只能说作出一个取舍,要么像QQ那样按内定的规则去取
    要么像Word中那样,配合用户的动作,在某个特定时候(onkeyup)提取链接,这样比较准确,但没有上面那么“傻瓜式的自动化”
      

  11.   


    要改成这样匹配很简单呀,将最后面的\w改成a-z\d(不包括汉字)就可以了
    MatchCollection mc = new Regex(@"(?is)(http|ftp)://(\w+[\./]?)*(\.(html|htm|aspx|asp|php))?[a-z\d\?\=&%]*").Matches(url);
    可问题是,假如我想传的URL是:
    http://topic.csdn.net/u/20110415/17/56321eb3-1639-4e22-a3bc-6ac4a6a931b0.html?id=60745&name=大师傅一梆梆一所得税254
    呢?
    最后将得到什么?
    http://topic.csdn.net/u/20110415/17/56321eb3-1639-4e22-a3bc-6ac4a6a931b0.html?id=60745&name=
    name参数取不到了,一样有问题,如果LZ说不可能出现这样的URL那我也无话可说
      

  12.   

    如果你想弄成QQ一样的,上面那个正则就可以了,匹配到
    字母、数字、问题、等号、&和%为止,其他则停止
      

  13.   

    微软的:http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
      

  14.   


    感觉在接近结果了。如果能匹配到"<"(html尖括号)和汉字和英文标点就可以了。
    请写具体一点。
      

  15.   


    既然是用户输入,一般不可能直接输入html(粘贴你可以用JS检测)
    抓标签里面的比较简单,因为规则明确
    抓一堆文本里面的,要看你想怎么取,如果想QQ那样的,忽略中文参数,那上面那个就差不多了
      

  16.   


    是这样,当用户在前台输入内容后,后台对内容进行判断,如果有url和mail就给他加上超链接。如果用户输入了回车,换行在前台传进来的内容中就会有html符号。这个没有用编辑器。直接从<textarea></textarea>中取值。
      

  17.   

    假设字符串样例:str="图文:没有声音,再好的戏也出不来,说说Win7声卡驱动! - 博客<br />http://www.xxx.com/a/b/c.html?d=255如果需要帮助请联系我:[email protected]<br />有问题可以到www.csdn.net提问"
    降低要求,只需要匹配到中文汉字和标点。请写具体点。我对正则不熟悉。只要能匹配写上面的的地址、域名邮件就可以了。谢谢。