Javascript 如果文件名包含括号(),则上载的文件不会上载

Javascript 如果文件名包含括号(),则上载的文件不会上载,javascript,c#,regex,ajax,file-upload,Javascript,C#,Regex,Ajax,File Upload,我有一个FileUpload控件,我上传PDF文件并将其保存到文件夹中,文件路径保存到数据库中 问题是,当我上传一个包含括号()的文件作为文件名的一部分时,它返回undefined。只有当文件名有括号()时才会发生这种情况,如果没有括号(),则可以正常上载 这是我的密码 var filePaths; function UploadFile() { var fileUpload = document.getElementById("fuPDFupload"); var regex

我有一个FileUpload控件,我上传PDF文件并将其保存到文件夹中,文件路径保存到数据库中

问题是,当我上传一个包含括号()的文件作为文件名的一部分时,它返回undefined。只有当文件名有括号()时才会发生这种情况,如果没有括号(),则可以正常上载

这是我的密码

var filePaths;
function UploadFile() {

    var fileUpload = document.getElementById("fuPDFupload");
    var regex = new RegExp("([a-zA-Z0-9\s_\\.\-:])+(.jpg|.png|.pdf)$");
    if (regex.test(fileUpload.value.toLowerCase())) {

        //Check whether HTML5 is supported.
        if (typeof (fileUpload.files) != "undefined") {
            //Initiate the FileReader object.
            var reader = new FileReader();
            //Read the contents of Image File.
            reader.readAsDataURL(fileUpload.files[0]);
            reader.onload = function (e) {
                //Initiate the JavaScript Image object.
                var image = new Image();

                //Set the Base64 string return from FileReader as source.
                image.src = e.target.result;


                var fileUpload = $("#fuPDFupload").get(0);
                var files = fileUpload.files;

                var data = new FormData();
                for (var i = 0; i < files.length; i++) {
                    data.append(files[i].name, files[i]);
                }

                $.ajax({
                    url: "FileUploadHandler.ashx",
                    type: "POST",
                    data: data,
                    contentType: false,
                    processData: false,
                    success: function (result) {
                        filePaths = result;
                        //Save to DB
                        UpdateSchedule();
                    },
                    error: function (err) {
                    }
                });
                return true;
            };


        } else {
            alert("This browser does not support HTML5.");
            return false;
        }
    } else {
        return false;
    }

}
我相信这个问题可能是因为正则表达式不正确,但我无法修复它。
请帮助我如何上传文件名中包含括号()的文件。谢谢。

只需离开下一个regex
新的RegExp(“(\(jpg | png | pdf)$”,“i”);
。它检查文件名是否有扩展名jpg、png或pdf。文本大小写无关紧要,因此添加了“i”作为第二个参数


你可以在

上学习正则表达式你是否尝试过修改正则表达式以包含括号?我尝试过,但没有成功。我不确定我是否正确地构造了正则表达式,如下转义:
\(
\)
,因为圆括号是正则表达式语法(分组)的一部分.但是:你为什么要这样做呢?首先一定有人想出了那个正则表达式,故意限制可以上传的内容。应该有一个要求/规则,否则整个测试就没有意义。或者至少向用户返回一条有意义的消息,只是无缘无故地拒绝会让他们很困惑。防弹文件上传安全检查总是涉及文件字节签名测试,如libmagic,文件名可能被伪造。文件(和文件名)检查/修改必须在服务器端完成,否则可能会出现恶意代码注入。我是否应该按照您的建议更改我的正则表达式?新的正则表达式(\(jpg | png | pdf)$,“I”);这对我来说很好:var regex=new RegExp(“\.+(.jpg |.png |.pdf)$”;
public class FileUploadHandler : IHttpHandler {

    public void ProcessRequest(HttpContext context)
        {
            if (context.Request.Files.Count > 0)
            {
                string filePaths = Guid.NewGuid().ToString() + ".pdf";
                HttpPostedFile file = context.Request.Files[0];
                string path = context.Server.MapPath("~/QfrencyInvoices/" + filePaths);
                file.SaveAs(path);

                context.Response.ContentType = "text/plain";
                context.Response.Write(filePaths);
            }
        }

    public bool IsReusable {
        get {
            return false;
        }
    }

}