我试图为 Javascript 找到一个 Windows 文件路径验证,但似乎没有一个能满足我想要的要求,所以我决定自己构建它。
要求如下:
需要扩展)
这是我想出的正则表达式:
/^([a-z]:((\|/|\\|//))|(\\|//))[^<>:"|?*]+/i
但是有一些问题:
规则中提到的
var reg = new RegExp(/^([a-z]:((\\|\/|\\\\|\/\/))|(\\\\|\/\/))[^<>:"|?*]+/i);
var startList = [
'C://test',
'C://te?st.html',
'C:/test',
'C://test.html',
'C://test/hello.html',
'C:/test/hello.html',
'//test',
'/test',
'//test.html',
'//10.1.1.107',
'//10.1.1.107/test.html',
'//10.1.1.107/test/hello.html',
'//10.1.1.107/test/hello',
'//test/hello.txt',
'/test/html',
'/tes?t/html',
'/test.html',
'test.html',
'//',
'/',
'\\\\',
'\\',
'/t!esrtr',
'C:/hel**o'
];
startList.forEach(item => {
document.write(reg.test(item) + ' >>> ' + item);
document.write("<br>");
});
最佳答案
不幸的是,正则表达式的 JavaScript 风格不支持后视,
但幸运的是它确实支持前瞻,这是关键因素
如何构建正则表达式。
让我们从一些观察开始:
点、斜线或反斜线。 “禁止”字符集还包括
\n
, 因为这些字符都不能是文件名的最后一个字符或其段(在点或(反)斜线之间)。
(除了...),但“排除列表”还必须包含一个点,
斜线、反斜线、空格和
\n
(第 1 点中提到的字符)。 第 1 点或第 2 点中提到的字符。
考虑到这些点,我从 3 个部分构建了正则表达式:
斜线(向前或向后)。
负前瞻 - 每个字符后面的“禁止”字符列表
上述字符(见第 1 点)。
+
量词)。 所以正则表达式如下:
^
- 字符串的开始。 (?:[a-z]:)?
- 驱动器号和冒号,可选。 [\/\\]{0,2}
- 0 到 2 次之间的反斜杠或斜杠。 (?:
- 非捕获组的开始,由于 +
需要后面的量词。
[.\/\\ ]
- 第一种选择。 (?![.\/\\\n])
- 负前瞻 - “禁止”字符。 |
- 或者。[^<>:"|?*.\/\\ \n]
- 第二种选择。 )+
- 非捕获组结束,可能出现多次。 $
- 字符串的结尾。 如果您尝试分别匹配每个路径,请仅使用
i
选项。但是如果你在不同的行中有多个路径,并匹配它们
全局一次性添加
g
和 m
选项。有关工作示例,请参阅 https://regex101.com/r/4JY31I/1
注:我想
!
也应该被视为禁忌特点。如果您同意,请将其添加到第二个选项中,例如后
*
.
关于javascript - 正则表达式窗口路径验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51494579/