これはあなたのためにうまくいくかもしれません
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');