gpt4 book ai didi

javascript - 正则表达式窗口路径验证器

转载 作者:行者123 更新时间:2023-12-03 12:58:11 26 4
gpt4 key购买 nike

我试图为 Javascript 找到一个 Windows 文件路径验证,但似乎没有一个能满足我想要的要求,所以我决定自己构建它。

要求如下:

  • 路径不应为空
  • 可以以 x:\, x:\\,\,//开头,后跟文件名(没有文件
    需要扩展)
  • 文件名不能包含以下特殊字符:<>:"|?*
  • 文件名不能以点或空格结尾

  • 这是我想出的正则表达式:
    /^([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 点中提到的字符)。
  • 在“初始部分”(C:\) 之后可以有多个实例
    第 1 点或第 2 点中提到的字符。

  • 考虑到这些点,我从 3 个部分构建了正则表达式:
  • “起始”部分,匹配驱动器号、冒号和最多 2 个
    斜线(向前或向后)。
  • 第一种选择 - 点、斜线、反斜线或空格,
    负前瞻 - 每个字符后面的“禁止”字符列表
    上述字符(见第 1 点)。
  • 第二种选择 - 第 2 点中提到的字符。
  • 上述两种选择都可以多次出现( + 量词)。

  • 所以正则表达式如下:
  • ^ - 字符串的开始。
  • (?:[a-z]:)? - 驱动器号和冒号,可选。
  • [\/\\]{0,2} - 0 到 2 次之间的反斜杠或斜杠。
  • (?: - 非捕获组的开始,由于 + 需要
    后面的量词。
  • [.\/\\ ] - 第一种选择。
  • (?![.\/\\\n]) - 负前瞻 - “禁止”字符。
  • | - 或者。
  • [^<>:"|?*.\/\\ \n] - 第二种选择。
  • )+ - 非捕获组结束,可能出现多次。
  • $ - 字符串的结尾。

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

    但是如果你在不同的行中有多个路径,并匹配它们
    全局一次性添加 gm选项。

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

    注:我想 !也应该被视为禁忌
    特点。如果您同意,请将其添加到第二个选项中,例如后 * .

    关于javascript - 正则表达式窗口路径验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51494579/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com