2017-12-16 30 views
0

파일 경로의 유효성을 검사하지 않고 파일 이름에 유효하지 않은 문자로 파일 이름의 유효성을 검사하려고합니다. 다양한 조합을 시도했지만 내 자바 스크립트 함수 중 아무 것도 트릭을 할 것.파일 경로 유효성 검사없이 파일 이름에 잘못된 문자 (특수 문자 및 국제 문자)가 있는지 확인하십시오.

@Html.TextBoxFor(model => model.Attachment, new { type = "file" , onchange = "ValidateFileName(this)" }) 

JS :

function ValidateFileName(name) { 
     if (name.value.match(/\.\.[a-z][a-z][a-z]$/) || name.value.match(/\.\.[a-z][a-z][a-z][a-z]$/) || name.value.match(/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:%<>/$"]*[^\.\|\*\?\\:%<>/$"]+$/)) { 

      alert('Invalid file extension.'); 
      name.form.reset(); 
      name.focus(); 
      return false; 
     } 
    } 

답변

1

이 내가 일반적으로 Windows 파일 이름의 유효성을 검사하는 데 사용하는 정규 표현식입니다 :

^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)[^\x00-\x1f\\?*:\";|/]+$ 

하지만 name 변수가 파일 경로를 포함하는 경우, 먼저이를 를 사용하여 파일 이름을 추출합니다.

var filename = name.split(/(\\|\/)/g).pop(); 

나 :

보조 노트에
var name_pieces = name.split('\\'); 
var filename = name_pieces[name_pieces.length - 1]; 

가 두 번 코드의이 부분의 동작을 확인합니다

onchange = "ValidateFileName(this)" 

뭔가 잘못을받은이 내가 느끼기 때문에 ... 난 몰라 알아,하지만 뭔가가로 작성해야 말해 계속 :

onchange = "ValidateFileName(this.value)" 
+0

파일 이름에서 경로를 분할하는 것은 내가 누락 된 것이 었습니다. 고맙습니다 ! 이제 작동합니다. 또한 this.value에 대한 귀하의 질문에 대답, 내 JS 함수는 실제로 this.value 전달하지 못했습니다 parameter.value 함께 확인합니다. – user7221204

0

는 .NET에서, 당신은 inval이 목록을 얻기 위해 Path.GetInvalidFileNameChars() 정적 인 방법을 사용할 수 있습니다 id 문자. (참고 : 파일 경로 문자에 대해서는 Path.GetInvalidPathChar()도 있습니다).

서버 측에

,이 작업을 수행 할 수 있습니다

var invalidChars = Path.GetInvalidFileNameChars(); 
var hasBadChars = filename.Any(c => invalidChars.Contains(c)); 

을 JS 측의 경우, 출력 할 JS 배열 서버 측에 invalidChars는 다음과 같이 뭔가를 할 수 :

if (invalidChars.some(function(v) { return filename.indexOf(v) >= 0; })) { 
    // There's at least one 
} 
+0

나는 그것의 서버 측을 이해했다. 하지만 JS 파트를 구현하는 방법을 알려주시겠습니까? 난 그냥 파일 필드를 재설정하고 잘못된 문자가 있다는 경고를 표시 찾고 있습니다. – user7221204