javascript中的文件路径验证

Muh*_*riq 4 javascript regex validation

我正在尝试在 javascript 中验证 XML 文件路径。我的正则表达式是:

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

即使路径错误,它也会返回 true。这些是有效的路径

D:/test.xml
D:\\folder\\test.xml
D:/folder/test.xml
D:\\folder/test.xml
D:\\test.xml
Run Code Online (Sandbox Code Playgroud)

t.n*_*ese 5

起初明显的错误:

+是具有至少一个含义的重复指示符。
所以(\.xml+)将匹配以.xm开头的所有内容,后跟一个或多个l(它也会匹配.xmlllll)。该?方法可选的,所以(\.xml+)?有这意味着它可以有一个.xml,但它不是必需的。

同样是([a-zA-Z]:)?这种手段的驱动器盘符是可选的。

现在不那么明显的错误

[a-zA-Z0-9\\s_@-^!#$%&+={}\[\]]在这里你定义了一个允许的字符列表。你有\\s,我假设你想允许空格,但这允许\s所以你需要将其更改为\s. 那么你有这部分@-^我假设你想允许@-^而是-有特殊的含义里面的[ ] 它定义了一个范围,因此允许在范围内的所有字符 @^ ,如果你想要让-你需要逃避它有所以你要写@\-^你也需要照顾^,如果是对的后面[那也有特殊的意义。

您的正则表达式应包含以下部分:

  • ^[a-z]:以 ( ^) 驱动程序字母开头
  • ((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+后跟一个或多个以\或开头的路径部分,/路径名包含一个或多个您定义的字母 ( a-z0-9\s_@\-^!#$%&+={}\[\])
  • \.xml$以 ( $)结尾.xml

因此,您的最终正则表达式应如下所示
/^[a-z]:((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+\.xml$/i.test(str)
(假设您使用该i标志执行不区分大小写的正则表达式)

编辑:

var path1 = "D:/test.xml";               // D:/test.xml
var path2 = "D:\\folder\\test.xml";      // D:\folder\test.xml
var path3 = "D:/folder/test.xml";        // D:/folder/test.xml
var path4 = "D:\\folder/test.xml";       // D:\folder/test.xml
var path5 = "D:\\test.xml";              // D:\test.xml

console.log( /^[a-z]:((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+\.xml$/i.test(path1) );
console.log( /^[a-z]:((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+\.xml$/i.test(path2) );
console.log( /^[a-z]:((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+\.xml$/i.test(path3) );
console.log( /^[a-z]:((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+\.xml$/i.test(path4) );
console.log( /^[a-z]:((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+\.xml$/i.test(path5) );
Run Code Online (Sandbox Code Playgroud)

更新:

你需要照顾/\如果你需要逃避他们取决于你是否使用它new RegExp(' ... the regex ... ',"i")new RegExp(" ... the regex ... ","i")/ ... the regex ... /i

有关正则表达式的更多信息,您应该查看例如www.regular-expressions.info