4

javascript で XML ファイル パスを検証しようとしています。私の正規表現は次のとおりです。

var isValid = /^([a-zA-Z]:)?(\\{2}|\/)?([a-zA-Z0-9\\s_@-^!#$%&+={}\[\]]+(\\{2}|\/)?)+(\.xml+)?$/.test(str);

パスが間違っていても true を返します。これらは有効なパスです

D:/test.xml
D:\\folder\\test.xml
D:/folder/test.xml
D:\\folder/test.xml
D:\\test.xml
4

3 に答える 3

0

これはあなたのためにうまくいくかもしれません

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');
于 2013-04-26T08:04:37.650 に答える