|
|
|
|
|
|
在Web應用中,我們使用tag保存用戶輸入,主要tag包含textbox、textarea和input file等等,然而輸入數(shù)據(jù)的用戶可以上傳任何文件格式,所以我們需要在客戶端和服務器端驗證它。 我們作為開發(fā)人員知道應該在相應的網頁上上傳哪個文件擴展名或文件類型。 因此,文件驗證應該是必要的,為此,我們需要知道上傳文件的擴展名。
在本文中,我們將學習如何在javascript(客戶端)中獲取文件擴展名,以便我們對其進行驗證。 我們可以使用兩種不同的方法來實現(xiàn)。
兩種獲得文件擴展名的方法:
這里我們添加一個表單標簽,帶有文件上傳控件和按鈕標簽。 在按鈕單擊時,我們調用 getFileExtention() 方法,該方法提供警報消息并顯示上載文件的擴展名。 代碼如下所示。
<form action="/uploadFile">
<input id="myFile" type="file" name="file">
<button onclick="fnGetExtension()">獲得擴展名</button>
</form>
這里我們有正則表達式(Regex)值,它給我們文件擴展名。 即使URL包含 ?foo=123 查詢字符串或 #hash 值,此正則表達式也可用于從URL中提取文件擴展名。
Javascript代碼:
function fnGetExtension() {
//通過id獲得文件輸入元件
var fileInput = document.getElementById('myFile');
//獲得文件名
var fileName = fileInput.files[0].name;
//文件擴展名的正則表達式
var patternFileExtension = /\.([0-9a-z]+)(?:[\?#]|$)/i;
//獲得文件擴展名
var fileExtension = (fileName).match(patternFileExtension);
alert(fileExtension);
}
這里我們使用 split() 方法和使用一個 點 (.) 來分割, 以及使用 pop() 方法獲得文件擴展名。
Javascript代碼:
function fnGetExtension() {
//通過id獲得文件輸入元件
var fileInput = document.getElementById('myFile');
//獲得文件名
var fileName = fileInput.files[0].name;
//獲得文件擴展名
var fileExtension = fileName.split('.').pop();
alert(fileExtension);
}
這里我們已經展示了如何在javascript中使用和不使用正則表達式來獲取文件擴展名,我們可以在上傳文件時用于文件驗證。
#知識擴展
split() 方法用于把一個字符串分割成字符串數(shù)組。
stringObject.split(separator,howmany)
| 參數(shù) | 描述 |
|---|---|
| separator | 必需。字符串或正則表達式,從該參數(shù)指定的地方分割 stringObject。 |
| howmany | 可選。該參數(shù)可指定返回的數(shù)組的最大長度。如果設置了該參數(shù),返回的子串不會多于這個參數(shù)指定的數(shù)組。如果沒有設置該參數(shù),整個字符串都會被分割,不考慮它的長度。 |
一個字符串數(shù)組。該數(shù)組是通過在 separator 指定的邊界處將字符串 stringObject 分割成子串創(chuàng)建的。返回的數(shù)組中的字串不包括 separator 自身。
但是,如果 separator 是包含子表達式的正則表達式,那么返回的數(shù)組中包括與這些子表達式匹配的字串(但不包括與整個正則表達式匹配的文本)。
注釋:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每個字符之間都會被分割。
注釋:String.split() 執(zhí)行的操作與 Array.join 執(zhí)行的操作是相反的。
pop() 方法用于刪除并返回數(shù)組的最后一個元素。
arrayObject.pop()
arrayObject 的最后一個元素。
pop() 方法將刪除 arrayObject 的最后一個元素,把數(shù)組長度減 1,并且返回它刪除的元素的值。如果數(shù)組已經為空,則 pop() 不改變數(shù)組,并返回 undefined 值。
