热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正则表达式Windows路径验证器

如何解决《正则表达式Windows路径验证器》经验,为你挑选了1个好方法。

我试图找到Java脚本的Windows文件路径验证,但似乎没有一个可以满足我想要的要求,因此我决定自己构建它。

要求如下:

路径不能为空

可以以x:\,x:\\,\,//开头,然后是文件名(无需文件扩展名)

文件名不能包含以下特殊字符:<>:“ |?*

文件名不能以点或空格结尾

这是我想出的正则表达式: / ^([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("
"); });

Valdi_Bo.. 5

不幸的是,Javascript风格的正则表达式不支持先行式,但幸运的是它支持先行,这是构造正则表达式的关键因素。

让我们从一些观察开始:

    在点,斜杠,反斜杠或空格之后,不能再出现另一个点,斜杠或反斜杠。该“禁止”字符集还包括 \n,因为这些字符都不是文件名或其段(点之间或(反)斜杠之间)的最后一个字符。

    路径中允许的其他字符是您提到的字符(...除外),但是“排除列表”中还必须包括点,斜杠,反斜杠,空格和\n(第1点中提到的字符)。

    在“初始部分”(C:\)之后,可以在点1或2中提到多个char实例。

考虑到这些要点,我从三个部分构建了正则表达式:

“开始”部分,匹配驱动器号,冒号和最多2个斜杠(向前或向后)。

第一个替代方法-点,斜杠,反斜杠或带负前瞻性的空格-在上述每个字符之后列出“禁止”字符(请参见第1点)。

第二种选择-第2点提到的字符。

以上两种选择都可以多次出现(+量词)。

因此正则表达式如下:

^ -字符串的开头。

(?:[a-z]:)? -驱动器号和冒号(可选)。

[\/\\]{0,2} -反斜杠或斜杠,介于0到2次之间。

(?:-非捕获组的开始,由于+ 后面有量化符而需要。

[.\/\\ ] -第一种选择。

(?![.\/\\\n]) -负前瞻-“禁止”字符。

| - 要么。

[^<>:"|?*.\/\\ \n] -第二种选择。

)+ -非捕获组的结尾可能会出现多次。

$ -字符串的结尾。

如果尝试分别匹配每个路径,请仅使用i选项。

但是,如果您在单独的行中有多个路径,并一次性进行全局匹配,则还要添加gm选项。

有关工作示例,请参见https://regex101.com/r/4JY31I/1

注意:我想也!应该将其视为禁止字符。如果您同意,则将其添加到第二个替代方法中,例如在之后*



1> Valdi_Bo..:

不幸的是,Javascript风格的正则表达式不支持先行式,但幸运的是它支持先行,这是构造正则表达式的关键因素。

让我们从一些观察开始:

    在点,斜杠,反斜杠或空格之后,不能再出现另一个点,斜杠或反斜杠。该“禁止”字符集还包括 \n,因为这些字符都不是文件名或其段(点之间或(反)斜杠之间)的最后一个字符。

    路径中允许的其他字符是您提到的字符(...除外),但是“排除列表”中还必须包括点,斜杠,反斜杠,空格和\n(第1点中提到的字符)。

    在“初始部分”(C:\)之后,可以在点1或2中提到多个char实例。

考虑到这些要点,我从三个部分构建了正则表达式:

“开始”部分,匹配驱动器号,冒号和最多2个斜杠(向前或向后)。

第一个替代方法-点,斜杠,反斜杠或带负前瞻性的空格-在上述每个字符之后列出“禁止”字符(请参见第1点)。

第二种选择-第2点提到的字符。

以上两种选择都可以多次出现(+量词)。

因此正则表达式如下:

^ -字符串的开头。

(?:[a-z]:)? -驱动器号和冒号(可选)。

[\/\\]{0,2} -反斜杠或斜杠,介于0到2次之间。

(?:-非捕获组的开始,由于+ 后面有量化符而需要。

[.\/\\ ] -第一种选择。

(?![.\/\\\n]) -负前瞻-“禁止”字符。

| - 要么。

[^<>:"|?*.\/\\ \n] -第二种选择。

)+ -非捕获组的结尾可能会出现多次。

$ -字符串的结尾。

如果尝试分别匹配每个路径,请仅使用i选项。

但是,如果您在单独的行中有多个路径,并一次性进行全局匹配,则还要添加gm选项。

有关工作示例,请参见https://regex101.com/r/4JY31I/1

注意:我想也!应该将其视为禁止字符。如果您同意,则将其添加到第二个替代方法中,例如在之后*


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
author-avatar
mobiledu2502852915
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有