2012-09-29 34 views
1

我想驗證JavaScript中的文件擴展名。當我在我的if語句中只使用一個參數時,如下所示在JavaScript中的文件擴展名驗證

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

代碼有效。但如果我添加一個或這樣的語句

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

該代碼不起作用,並始終返回true。

回答

4

您需要使用&&,不||

與邏輯的問題:

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

是,只要擴展名是其中一個選項(「PNG」或「JPG」) ,這不是其他,所以相反的比較永遠是真的。如果是「png」,那不是「jpg」。如果它是「jpg」,那不是「png」。

我對SQL查詢有很多這個問題。當你用很多比較寫出一個條件時,試着大聲說出來。如果擴展名不是「png」而擴展名不是「jpg」,則發出錯誤。

+0

哇,我覺得自己像個白癡,謝謝你的回答。 – user1672267

1

我的猜測是,你需要& &(和),而不是|| (要麼)。

With & &,只有當擴展名不等於兩個擴展名時,它纔是錯誤的。

用||,例如ext ==='png'是真的,因爲其他條件將返回true(因此整個條件爲真),因爲它是!==到'jpg'。

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

+0

非常好的一點!這通常是我處理一系列事情的方法 - 我只是試圖解決眼前的問題。和很好的添加IE修復:) – Ian

+0

是的,這很好,謝謝。 – user1672267

+0

@ianpgall - 那裏有完整的ACK。其實回答OP問題並不是一件壞事;) –

0

我會建議使用驗證JavaScript中的文件擴展名的jQuery是這樣的:

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."); 
} 

它的可讀性和完美的作品。