1

javascriptでファイル拡張子を検証しようとしています。このようなifステートメントで引数を1つだけ使用すると

     if(ext!='png' ){
                bodyAppend("err","Incorrect file type");
                bodyAppend("br","");
        }

コードは機能します。しかし、私がこのようなまたはステートメントを追加すると

    if(ext!='png' || ext!='jpg'){
                bodyAppend("err","Incorrect file type");
                bodyAppend("br","");
        }

コードは機能せず、常にtrueを返します。

4

4 に答える 4

4

を使用する必要がありますが&&||

ロジックの問題:

ext!='png' || ext!='jpg'

つまり、拡張子がこれらのオプションの1つ("png"または"jpg")になるとすぐに、他のオプションではなくなるため、反対の比較が常に真になります。「png」の場合は「jpg」ではありません。「jpg」の場合は「png」ではありません。

私はSQLクエリでこの問題をたくさん抱えています。多くの比較で条件を書き出すときは、大声で言ってみてください。拡張子が「png」ではなく、拡張子が「jpg」でない場合は、エラーをスローします。

于 2012-09-29T21:18:26.090 に答える
2

@anpgallの答えは正しいですが、チェックする拡張機能が多数ある場合は、このコードの保守が簡単になる可能性があります。

// At the top of your function
var imageExts = ['png', 'jpg', 'gif'];

// later
// Perhaps setting ext to lower case.
if (imageExts.indexOf(ext)  === -1) {
  bodyAppend("err","Incorrect file type");
}

古いバージョンのIEをターゲットにする必要がある場合は、このポリフィルを含めることができます

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf

于 2012-09-29T21:22:43.463 に答える
1

私の推測では、||ではなく&&(および)が必要です (また)。

&&を使用すると、拡張子が両方に等しくない場合にのみfalseになります。

||を使用すると、たとえばext ==='png'の場合はtrueになります。これは、!== to'jpg'であるため、他の条件がtrueを返すためです(したがって、条件全体がtrueになります)。

于 2012-09-29T21:22:36.347 に答える
0

jQueryを使用してJavaScriptでファイル拡張子を検証するこの方法をお勧めします。

HTML

<input id="file" type="file" class="findDocumentGeneral">

Javascript / Jquery

var extension = $('.findDocumentGeneral').val().split('.').pop().toLowerCase();
if (~$.inArray(extension, ['jpg', 'jpeg', 'gif', 'png', 'pdf', 'docx'])) {
    alert(extension); // to see if it works correctly
} else {
    alert("Incorrect file type.");
}

読みやすく、完璧に機能します。

于 2016-02-19T13:56:39.837 に答える