我在文本框中写了一个路径,我想验证它是不是合法,我用了一个Directoryinfo类
但如果我在文本框中写\a\\\\\\\\\b它也是可以创建目录的,但给用户的体验就不好了,我想问问各位高手,怎么去决断它全不合法啊?

解决方案 »

  1.   

    ^(([a-zA-Z]:\\)|(\\{2}\w+)\$?)((([^/\\\?\*])(\\?))*)$
      

  2.   

    http://so.csdn.net/bbsSearchResult.aspx?q=%E8%B7%AF%E5%BE%84+%E6%AD%A3%E5%88%99&p=0
      

  3.   

    一种做法是给TextBox加Leave事件代码,一旦TextBox失去焦点,就规范一下里面输入的地址:        private void textBox1_Leave(object sender, EventArgs e)
            {
                try
                {
                    textBox1.Text = new DirectoryInfo(textBox1.Text).FullName;
                }
                catch
                {
                    textBox1.Text = "";
                }
            }
      

  4.   

    用正则表达式,涉及到转义字符,比如它正则式放到string中,它会报“无法识别的转义序列”,过滤非法字符,如"\\","*","?"," <"等等,DirectoryInfo就可以,
    我是这么想的,为什么DirectoryInfo类也能让\\\\通过呢,我认为是这样的:比如\folder\\\\oyja,只是在folder下建一个空目录,空目录下再建一个oyja目录,所有这个DirectoryInfo类能认识,但在我们看来就有点不好看,毕竟是用户体验嘛
      

  5.   

    我还想说明一点就是,我的路径是一个IP加一目录名,我只要在文本框写目录名,前面的IP我在程序中写好了,固定了,也就是说我只要后面的部分,如:\\192.168.0.128\upload\folder,我只要判断\upload\folder是不是合法就行了
      

  6.   


                string input = @"\\192.168.0.128\upload\folder";
                Regex re = new Regex(@"^\\\\[0-9]{1,3}(\.[0-9]{1,3}){3}(\\[^\\/:*?""<>|]+)+\\?$");
                Console.WriteLine(re.IsMatch(input).ToString());// true