2016-06-10 6 views
0

강화 수정의 일환으로 파일 경로의 유효성을 검사해야합니다. 예를 들어, Windows 경로 정규식

  • "C:/Users/<username>/sample1.txt"
    1. "C:\Users\<username>\sample1.txt"

    우리는 위의 경로를 검증하기위한 아래 정규식으로 시도하지만, 파일 경로가 \ 포함 된 경우 우리는 오류와 함께 종료되었습니다. 그래서 파일 경로에 두 개의 슬래시를 모두 사용할 수있는 유효한 정규식을 제안하십시오.

    Validator.FilePath=.*[\\]\\[!"#$%&'()_*+,/:;<=>[email protected]\\^`{|}~].* 
    
    +1

    경로가 유효한지 또는 실제로 존재하는지 확인하고 싶습니까? 후자의 경우 나는 단지 새로운'File' 객체를 만들고 프레임 워크가 경로 변환을 처리하도록 할 것입니다. 전자의 경우 비슷한 일을 할 수 있지만 부모 계층 구조를 반복하고 특정 조건에 도달 할 때까지 각 부모를 확인합니다. - 또는 일반적으로 경로 관련 유틸리티가있는 Apache Commons IO와 같은 라이브러리를 살펴볼 수도 있습니다. – Thomas

    +0

    다음과 같이 시도해 보았습니다 :. * (\/| \\). * (\\ | \ /) [! "# $ % & '() _ * +, \/:; <=>? @ \\ ^' {|} ~] * –

    +0

    개인 ESAPIValidationUtils() {} 공공 정적 문자열 getValidFilePath (문자열 reqParam) { \t 문자열 validFileName = ""; \t 시도 { \t \t 경우 (널 (null) = reqParam!) { \t. . \t \t validFileName = ESAPI.validator() getValidInput ("파일 경로", reqParam, "FilePath를", 256, TRUE); \t \t} \t} 캐치 (ValidationException 예) { \t \t Log.error ("com.dextersystems.util.ESAPIValidationUtils", "getValidFilePath()", ex); \t} \t return validFileName; } – Ramya

    답변

    0
    Validator.FilePath=(?:[a-zA-Z]\\:|[\\\\\\\\|/]+[\\w\\.]+)[\\\\|/]?([\\w]+[\\\\|/])*[\\w]*(\\.\\w+)$ 
    
    +1

    해결책을 조금 설명해보십시오. –

    2

    당신이 시도 할 수 :

    [a-zA-Z]:[\\\/](?:[a-zA-Z0-9]+[\\\/])*([a-zA-Z0-9]+\.txt) 
    
    • [a-zA-Z]:

      는 드라이브 문자와 :입니다.
    • [\\\/]\ 또는 /과 일치해야합니다.
    • (?:[a-zA-Z0-9]+[\\\/])*은 폴더 이름입니다. 필요한 문자 클래스에 임의의 문자를 추가 할 수 있습니다. 나는 a-zA-Z0-9만을 사용했습니다.
    • ([a-zA-Z0-9]+\.txt)은 파일 이름 용이고 .txt 확장자 - 파일 이름과 확장명을 일치시키고이를 캡처합니다.