これはあなたのためにうまくいくかもしれません
var str = 'D:/test.xml';
var str2 = 'D:\\folder\\test.xml';
var str3 = 'D:/folder/test.xml';
var str4 = 'D:\\folder/test.xml';
var str5 = 'D:\\test\\test\\test\\test.xml';
var regex = new RegExp('^[a-z]:((\\\\|\/)[a-zA-Z0-9_ \-]+)+\.xml$', 'i');
regex.test(str5);
in 文字列に一致させるために\\\\in RegExp を使用する理由\\は、javascript が\特殊文字をエスケープするために使用するためです。つまり、改行、\n単語\b境界などに使用され\ます\\。また、ファイル名とフォルダー名に異なる規則を設定することもできます。
アップデート
[a-zA-Z0-9_\-]+正規表現のこのセクションは、実際にはファイル/フォルダー名と一致します。したがって、ファイル/フォルダー名でより多くの文字を許可するには、このクラスにそれらを追加するだけです。たとえば、ファイル/フォルダー名で文字を許可するには*、[a-zA-Z0-9_\-\*]+
更新 2
回答に追加するために、以下は検証に別のチェックを追加する RegExp です。つまり、パス内の/との混合をチェックし\\ます。
var str6 = 'D:/This is folder/test @ file.xml';
var str7 = 'D:/This is invalid\\path.xml'
var regex2 = new RegExp('^[a-z]:(\/|\\\\)([a-zA-Z0-9_ \-]+\\1)*[a-zA-Z0-9_ @\-]+\.xml?', 'gi');
regex2すべてのパスに一致しますが、str7
アップデート
inの?代わりにa のタイプミスをお詫びします。以下は、修正された意図されたバージョンです $regex2
var regex2 = new RegExp('^[a-z]:(\/|\\\\)([a-zA-Z0-9_ \-]+\\1)*[a-zA-Z0-9_ @\-]+\.xml$', 'i');