2

ファイルパスを入力できるフォームがあります。彼らが入っている道が写真を指していることを確認したいので、これがうまくいくと思ったものです。

function checkExt()
{
    var extension= /* I know that the code to cut the extension off of the file
                      is working correctly so for now let's just go with it ok */
    if(extension!="jpg" || "gif" || "bmp" || "png" || "whatever else")
        alert("The file extension you have entered is not supported");
}

しかし、これは機能しません。チェックするファイルを1種類だけ選択すると、正しく機能するため、ifステートメントまで追跡しました。ですから、あなたへの私の質問は、これを正しく機能させるために何を変更する必要があるかということです。私はこれを約3時間続けていますが、それは私を怒らせています。事前にすべての助けをありがとう。

4

6 に答える 6

6

これは構文と論理エラーです。そのはず:

if (extension != "jpg" && 
    extension != "gif" && 
    extension != "bmp" && 
    extension != "png" && 
    extension != "whatever else") {
    // This will execute when the extension is NOT one of the expected 
    // extensions.
}

さらに、正規表現を使用して、もう少し簡潔に処理できます。

if (!/jpg|gif|bmp|png|whatever/.test(extension)) {
    // This will execute when the extension is NOT one of the expected 
    // extensions.
}

補遺:

上記の例では、の値がサポートされている値の1つでextensionない場合に、ifステートメントの本体を実行します。の値がサポートされている値の1つであるときに、ifステートメントの本体を実行する場合はextensions、次のようにロジックを等しくない/および等しくなる/またはに変更します。

if (extension == "jpg" || 
    extension == "gif" || 
    extension == "bmp" || 
    extension == "png" || 
    extension == "whatever else") {
    // This will execute when the extension is one of the expected extensions.
}

また、正規表現を使用すると、より簡潔になります。

// I just removed the leading ! from the test case.
if (/jpg|gif|bmp|png|whatever/.test(extension)) {
    // This will execute when the extension is one of the expected extensions.
}
于 2012-08-06T21:20:54.907 に答える
1

&&の代わりにを使用する必要があり、最初の条件だけでなく、各条件で演算子||の前に接頭辞を付ける必要があります。!=extension

if (extension != "jpg" &&
    extension != "gif" &&
    extension != "bmp" && 
    extension != "png" &&
    extension != "whatever else")
于 2012-08-06T21:19:52.160 に答える
1

冗長性の代わりに、正規表現を使用します。

if (extension.search(/jpg|gif|bmp|png/) === -1) {
    alert("The file extension you have entered is not supported.");
}
于 2012-08-06T21:25:37.733 に答える
0

比較するパラメータを各句に含める必要があります。

if( extension != "jpg" || 
    extension != "gif" || 
    extension != "bmp" || 
    extension != "png" || 
    extension != "whatever else"){
 //TODO: handle condition
}

他の人が指摘しているように、これは論理的なエラーであり、「jpg」が拡張子の場合、「jpg」!=「gif」であるため条件がヒットします。の使用を検討することをお勧めし&&ます。

于 2012-08-06T21:20:37.667 に答える
0

extensionテストした各拡張機能の変数を比較する必要があります。これを行うコンパクトな方法は次のとおりです。

var extension = whatever;
var supportedExtensions = ["jpg","gif","bmp","png",... whatever else];
if (supportedExtensions.indexOf(extension) < 0) alert("Unsupported extension");
于 2012-08-06T21:23:33.953 に答える
0

他の回答は、多重比較のJavaScriptロジックがどのように間違っているかを示しています。ただし、これを行うためのはるかに優れた方法は、次のようなjavascriptマップを使用することです。

function checkExt() {
    var allowedExtensions = {
        "jpg": true, "gif": true, "bmp": true, "png": true, "whatever else":true
    };
    var extension= /* I know that the code to cut the extension off of the file
                      is working correctly so for now let's just go with it ok */
    if (allowedExtensions[extension] !== true) {
        alert("The file extension you have entered is not supported");
    }
}

オブジェクトにアイテムを追加/allowedExtensionsオブジェクトからアイテムを削除するだけで、メンテナンスが簡単になります。

于 2012-08-06T21:51:28.327 に答える