2012-09-04 4 views
0

그래서, 나는 서버 측 (PHP)에서 다른 유효성 검증을 보내기 전에 javascript/jquery를 사용하여 파일 확장자의 유효성을 검증합니다.자바 스크립트 확장 유효성 확인

여기에는 많은 출처가 있지만, 내 자신의 방식으로 만들려고 노력하고 있습니다.

// remove all elements to take only the file name 
var fileName  = $('input[type=file]').val().split('\\').pop().toLowerCase(); 
    validExtension = ['.jpg', '.png', '.gif','.jpeg']; // list of valid extensions 

$.each(validExtension, function (e, val) { // run thru all valid extensions 
    if (fileName.indexOf(val) !== -1) { // if found a valid one, stop validation. 
     invalidExt = false; 
     return false; 
    } else { // else, error true... 
     invalidExt = true; 
    } 
}); 

if (invalidExt) { 
    alert('error'); 
}else{ 
    alert('success'); 
} 

파일이 .jpg 또는 desert.jpg.exe 같은 이름의 중간에 다른 유효한 확장이있는 경우 문제가있다, 검증 통과됩니다

나는 위의 코드처럼 간단한 ideia에 도달 죽. 그래서, 어떻게 해결할 수 있을까요?

파일 이름의 마지막 확장자를 얻는 방법을 찾았습니까?

물론 어떤 조언도 내 손님이 될 수 있습니다.

감사합니다. 여기

답변

3

내가 그것을 할 거라고 방법은 다음과 같습니다

객체에 유효한 확장을 퍼팅
var validExtensions = { 
    jpg: true, 
    jpeg: true, 
    png: true, 
    gif: true 
}; 


var filename = $('input[type=file]').val().toLowerCase(); 

if (!validExtensions[filename.substr(filename.lastIndexOf('.')+1)]) { 
    alert('Invalid extension'); 
} 
  • 당신에게 빠른 (O (1)) 조회 시간을 제공합니다.
  • lastIndexOf을 사용하여 파일 이름의 마지막 마침표를 가져옵니다. 이 방법을 사용하면 항상 앞에 오는 것과 관계없이 항상 확장 프로그램을 보게됩니다. jQuery를하지 않고
+0

좋은 일, 당신은 왜 +1로 설정 했습니까? –

+0

''a.b'.lastIndexOf ('.') == 1'; ''a.b'.substr (1) == '.b''. 1을 더하면 마침표가 제거됩니다. – josh3736

0

은 :

var filename = "photo.exe.jpg"; 

var validExtensions = ['jpg', 'png', 'gif', 'jpeg']; 
var filenameLowerCase = filename.toLowerCase(); 
var isValid = false; 

for(var i=0; i<validExtensions.length; i++) 
    if(filenameLowerCase.indexOf(validExtensions[i], filenameLowerCase.length - validExtensions[i].length) !== -1) 
     isValid = true;