2017-05-31 9 views
0

ファイル拡張子が付いたLinux/Windowsでは、与えられたパスが有効であることを天気を検証する関数を記述しようとしています。WindowsとLinuxのパスを拡張子付きで検証する正規表現

例:

Windowsのパス:D:\ DATA \ MY_PROJECTの\ 01_07_03_061418738709443.doc
Linuxのパス:/source_data/files/08_05_09_1418738709443.pdf

は、私が試してみましたコードは

です
static String REMOTE_LOCATION_WIN_PATTERN = "([a-zA-Z]:)?(\\\\[a-z A-Z0-9_.-]+)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)\\\\?"; 

static String REMOTE_LOCATION_LINUX_PATTERN = "^(/[^/]*)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)/?$"; 

public boolean checkPathValidity(String filePath) { 

    Pattern linux_pattern = Pattern.compile(REMOTE_LOCATION_LINUX_PATTERN); 
    Pattern win_pattern = Pattern.compile(REMOTE_LOCATION_WIN_PATTERN); 
    Matcher m1 = linux_pattern.matcher(filePath); 
    Matcher m2 = win_pattern.matcher(filePath); 

    if (m1.matches() || m2.matches()) { 
     return true; 
    } else { 
     return false; 
    } 
} 

この関数は、pathがwindows/linuxのいずれかで有効な場合、結果をtrueにします。 上記の関数は、日付を含むいくつかのパスで正しい結果を返していません_? 、*そのパスに*。

+0

これは価値がありますか?ファイルに無効な文字が含まれていても、ファイルに有効な文字が含まれていても、存在しない、またはアクセスできないパスを参照している場合は、リモート側で例外が発生します。たとえば、 '' /root/08_05_09.pdf ''は正規表現チェックを渡しますが、アプリケーションが行っている操作が失敗したと考えられます。したがって、リモート側での有効性のチェックは関係なく行われます。 – VGR

+0

これらの検証は、クライアント側で実行されます。私はリモート側に従ってcheckPathValidity()メソッドを設定しています。 –

答えて

0
static String REMOTE_LOCATION_WIN_PATTERN = "([a-zA-Z]:)?(\\\\[a-z A-Z0-9_.-]+)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)\\\\?"; 

static String REMOTE_LOCATION_LINUX_PATTERN = "^(/[^/]*)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)/?$"; 

static Pattern linux_pattern = Pattern.compile(REMOTE_LOCATION_LINUX_PATTERN); 
static Pattern win_pattern = Pattern.compile(REMOTE_LOCATION_WIN_PATTERN); 

static final boolean WINDOWS = System.getProperty("os.name").startsWith("Windows"); 


public boolean checkPathValidity(String filePath) { 
    Matcher m = WINDOWS ? win_pattern.matcher(filePath) : linux_pattern.matcher(filePath); 

    return m.matches();  
} 
+0

私はパスG:\ DATA \ GREEN_DOC \ MyCab \ index \ 16_12_06_05_09_1418738709443F.DOCを試しました。動作していません –

+0

REMOTE_LOCATION_WIN_PATTERNが正しくない必要があります。 – Mike

+0

私はそれが私の質問について何であるか知っています。私はWindowsとLinuxシステム上のファイルパスを検証する正規表現が必要です –

関連する問題