And*_*osu 2 javascript regex validation
我试图找到Java脚本的Windows文件路径验证,但似乎没有一个可以满足我想要的要求,因此我决定自己构建它。
要求如下:
这是我想出的正则表达式: / ^([az]:((\ | / | \\\ ///))|(\\ | //))[^ <>:“ |?*] + /一世
但是有一些问题:
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>");
});Run Code Online (Sandbox Code Playgroud)
不幸的是,JavaScript风格的正则表达式不支持先行式,但幸运的是它支持先行,这是构造正则表达式的关键因素。
让我们从一些观察开始:
在点,斜杠,反斜杠或空格之后,不能再出现另一个点,斜杠或反斜杠。该“禁止”字符集还包括
\n,因为这些字符都不是文件名或其段(点之间或(反)斜杠之间)的最后一个字符。
路径中允许的其他字符是您提到的字符(...除外),但是“排除列表”中还必须包括点,斜杠,反斜杠,空格和\n(第1点中提到的字符)。
在“初始部分”(C:\)之后,可以在点1或2中提到多个char实例。
考虑到这些要点,我从三个部分构建了正则表达式:
+量词)。因此正则表达式如下:
^ -字符串的开头。(?:[a-z]:)? -驱动器号和冒号(可选)。[\/\\]{0,2} -反斜杠或斜杠,介于0到2次之间。(?:-非捕获组的开始,由于+
后面有量化符而需要。
[.\/\\ ] -第一种选择。(?![.\/\\\n]) -负前瞻-“禁止”字符。| - 要么。
[^<>:"|?*.\/\\ \n] -第二种选择。)+ -非捕获组的结尾可能会出现多次。$ -字符串的结尾。如果尝试分别匹配每个路径,请仅使用i选项。
但是,如果您在单独的行中有多个路径,并一次性进行全局匹配,则还要添加g和m选项。
有关工作示例,请参见https://regex101.com/r/4JY31I/1
注意:我想也!应该将其视为禁止字符。如果您同意,则将其添加到第二个替代方法中,例如在之后*。
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |