这可能对你有用
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 RegExp 匹配\\
字符串中的原因是 javascript 用于\
转义特殊字符,即\n
换行符、\b
单词边界等。所以要使用文字\
,请使用\\
. 它还允许您对文件名和文件夹名有不同的规则。
更新
[a-zA-Z0-9_\-]+
这部分正则表达式实际上匹配文件/文件夹名称。因此,要在文件/文件夹名称中允许更多字符,只需将它们添加到此类,例如,允许*
在文件/文件夹名称中添加[a-zA-Z0-9_\-\*]+
更新 2
为了增加答案,下面是一个正则表达式,它为验证添加了另一个检查,即它检查路径 中的/
和的混合。\\
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
更新
我很抱歉输入错误 a?
而不是$
in regex2
。以下是更正和预期的版本
var regex2 = new RegExp('^[a-z]:(\/|\\\\)([a-zA-Z0-9_ \-]+\\1)*[a-zA-Z0-9_ @\-]+\.xml$', 'i');