JQuery验证单独工作,但不能一起工作

JQuery验证单独工作,但不能一起工作,jquery,validation,jquery-validate,Jquery,Validation,Jquery Validate,*编辑** 我用&&而不是| |进行了尝试,现在它对于任何文件都不会返回为false。我确实认为需要&&尽管如此 我有一个自定义验证函数,用于检查文件是否为excel文件。当我测试是最后4个字符是.xls或最后5个字符是.xlsx时,它工作,但当我检查这两个字符时,它不工作。你知道为什么它不让我这么做吗 $.validator.addMethod("xlsxOrxls", function(value, element) { var isValid = true; var xls

*编辑**
我用&&而不是| |进行了尝试,现在它对于任何文件都不会返回为false。我确实认为需要&&尽管如此

我有一个自定义验证函数,用于检查文件是否为excel文件。当我测试是最后4个字符是.xls或最后5个字符是.xlsx时,它工作,但当我检查这两个字符时,它不工作。你知道为什么它不让我这么做吗

$.validator.addMethod("xlsxOrxls", function(value, element) {
    var isValid = true;
    var xlsx = value.substr(value.length - 5);
    var xls = value.substr(value.length - 4);
    if (xls != '.xls' || xlsx != '.xlsx') 
        isValid = false;
    return isValid;
}, "<br/><label style='color:red'><b>Not a valid file format.</b></label>"
);
$.validator.addMethod(“xlsxOrxls”,函数(值,元素){
var isValid=true;
var xlsx=value.substr(value.length-5);
var xls=value.substr(value.length-4);
如果(xls!='.xls'| | xlsx!='.xlsx')
isValid=false;
返回有效;
},“
不是有效的文件格式。” );
如果我注释掉var xlsx行并去掉If语句中的“| | xlsx!='.xlsx'”部分,它会工作,反之亦然,但如果我把它们都放在那里,它就不会工作。我甚至试着把它们分成两个独立的功能,但这也不起作用


你知道为什么不让我这么做吗?

我想你是在找&&,而不是| |。如果扩展名不同于.xls,并且它也不同于.xlsx,则isValid为false。

请改用正则表达式

$.validator.addMethod("xlsxOrxls", function(value, element) {
    var isValid = true;
    var xlsx = value.substr(value.length - 5);
    var xls = value.substr(value.length - 4);
    if (xls != '.xls' || xlsx != '.xlsx') 
        isValid = false;
    return isValid;
}, "<br/><label style='color:red'><b>Not a valid file format.</b></label>"
);
$.validator.addMethod(
    "xlsxOrxls",
    function(value, element) {
        return value.match(/\.xlsx?$/);
    },
    "<br/><label style='color:red'><b>Not a valid file format.</b></label>"
);
$.validator.addMethod(
“xlsxOrxls”,
函数(值、元素){
返回值。匹配(/\.xlsx?$/);
},
“
不是有效的文件格式。” );
或者,如果你真的想按自己的方式做:

$.validator.addMethod(
    "xlsxOrxls",
    function(value, element) {
        var xlsx = value.substr(value.length - 5);
        var xls = value.substr(value.length - 4);
        return xls == '.xls' || xlsx == '.xlsx';
    },
    "<br/><label style='color:red'><b>Not a valid file format.</b></label>"
);
$.validator.addMethod(
“xlsxOrxls”,
函数(值、元素){
var xlsx=value.substr(value.length-5);
var xls=value.substr(value.length-4);
返回xls=='.xls'| xlsx=='.xlsx';
},
“
不是有效的文件格式。” );
您有相互排斥的条件,但您试图同时检查这两个条件。如果最后5个字符是“.xlsx”,那么最后4个字符将永远不会是“.xls”,反之亦然


检查一个条件,如果不通过,检查另一个。

我在
xls
xlsx
类型文件上面临相同的验证问题。我试过这个最简单的方法

<input id="fileSelect" type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />

有效的接受类型: 对于CSV文件(.CSV),请使用:


对于2003-2007年Excel文件(.xls),请使用:


对于Excel文件2010(.xlsx),请使用:


对于文本文件(.txt),请使用:


对于图像文件(.png/.jpg/etc),请使用:


对于HTML文件(.htm、.HTML),请使用:


对于视频文件(.avi、.mpg、.mpeg、.mp4),请使用:


对于音频文件(.mp3、.wav等),请使用:


对于PDF文件,请使用:

<input type="file" accept=".pdf" /> 


引用Dom的答案

是的,我尝试了&&之后,现在它没有显示任何文件类型的错误消息。我对上面的帖子进行了编辑。谢谢,我意识到“或”不是正确的方式。在我发布了它之后,我使用了第二种方式,它按照我需要的方式工作。“我的方式”对regex有好处吗?它更短,更容易阅读。您不必记住substr从何处开始计数等。更可读的形式是
value.match(/\(xls | xslx | more | file | extensions | here)$/)。那就很难用你的方式写了。
<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
<input type="file" accept="text/plain" />
<input type="file" accept="image/*" />
<input type="file" accept="text/html" />
<input type="file" accept="video/*" />
<input type="file" accept="audio/*" />
<input type="file" accept=".pdf" />