none
验证上传图片式格的正则表达式在不同浏览器上结果不一样 RRS feed

  • 问题

  • 使用RegularExpressionValidator验证Fileupload控件中上传的图片格式时,发现在两种浏览器中,验证的结果不一样。

    验证图片格式的正则如下:
    (\S+)(.JPG|.jpg|.JPEG|.jpeg|.GIF|.gif|.BMP|.bmp|.PNG|.png)

    谷歌浏览器中图片名带有空格的无法通过。
    IE6中所有的图片无法通过验证。

    高手们帮帮忙,是不是我的正则出问题了,还是不同浏览器的问题呀?
    2009年9月23日 10:09

答案

  • 你只有在服务端正则了  不同浏览器不同方式 无法判断了
       <form id="form1" runat="server">
        <div>
            <asp:FileUpload ID="FileUpload1" runat="server" />
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        </div>
        </form>

    cs

           protected void Button1_Click(object sender, EventArgs e)
            {
              string path= Path.GetExtension(FileUpload1.FileName);
              System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(".JPG|.jpg|.JPEG|.jpeg|.GIF|.gif|.BMP|.bmp|.PNG|.png");
              if (reg.IsMatch(path))
              {
               FileUpload1.SaveAs("服务端路径"+FileUpload1.FileName);
              }
              else
              {
                  Response.Write("<script>javascript:alert('上传失败')</script>");
              }
            }
    • 已标记为答案 斌斌NO1 2009年9月24日 5:15
    2009年9月23日 17:05

全部回复

  • (\S*.JPG|.jpg|.JPEG|.jpeg|.GIF|.gif|.BMP|.bmp|.PNG|.png)
    • 已编辑 mldark 2009年9月23日 17:55
    2009年9月23日 10:13
  • 还是不行...一样的问题
    2009年9月23日 11:20
  • \s*\w+[\s\w]*.JPG|.jpg|.JPEG|.jpeg|.GIF|.gif|.BMP|.bmp|.PNG|.png
     你拿出你的文件名格式 我看看就知道怎么写了 不要让人老是猜测
    • 已编辑 mldark 2009年9月23日 17:55
    2009年9月23日 13:59
  • 文件名例如
    acb.jpg
    图片.jpg
    hello world.BMP

    是FileUpload上传后,RegularExpressionValidator通过正则来验证的
    IE中选择上传文件后可能包括了上传的路径 例如:C:\Documents and Settings\稻草人\桌面\NBA-篮球系列ip包.jpg
    谷歌浏览器上传时可能不包括路径,只有文件名,例如:NBA-篮球系列ip包.jpg

    怎样才能验证"."后面是图片格式(jpg,bmp)了?

    有没有像在C#中,openFileDialog.Filter = "图片文件|*.jpg|*.bmp"的属性来限制上传文件的格式了?

    2009年9月23日 16:05
  • 你只有在服务端正则了  不同浏览器不同方式 无法判断了
       <form id="form1" runat="server">
        <div>
            <asp:FileUpload ID="FileUpload1" runat="server" />
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        </div>
        </form>

    cs

           protected void Button1_Click(object sender, EventArgs e)
            {
              string path= Path.GetExtension(FileUpload1.FileName);
              System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(".JPG|.jpg|.JPEG|.jpeg|.GIF|.gif|.BMP|.bmp|.PNG|.png");
              if (reg.IsMatch(path))
              {
               FileUpload1.SaveAs("服务端路径"+FileUpload1.FileName);
              }
              else
              {
                  Response.Write("<script>javascript:alert('上传失败')</script>");
              }
            }
    • 已标记为答案 斌斌NO1 2009年9月24日 5:15
    2009年9月23日 17:05
  • 你好 我这里测试你给的那几个文件名我这里都是可以匹配的

    (.+)(\.JPG|\.jpg|\.JPEG|\.jpeg|\.GIF|\.gif|\.BMP|\.bmp|\.PNG|\.png)
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月24日 2:09
    版主
  • 你好 我这里测试你给的那几个文件名我这里都是可以匹配的

    (.+)(\.JPG|\.jpg|\.JPEG|\.jpeg|\.GIF|\.gif|\.BMP|\.bmp|\.PNG|\.png)
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond

    兄弟 你这个正则匹配多个子目录的全路径 匹配不了
    2009年9月24日 3:58
  • 兄弟 前边的.+是可以匹配非 换行的任意字符的咋个会匹配不了呢?
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月24日 4:05
    版主
  •  这样C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg 你试试
    2009年9月24日 4:11