【问题标题】:Test filename with regular expression用正则表达式测试文件名
【发布时间】:2011-07-20 21:28:29
【问题描述】:

我正在尝试使用此模式测试文件名字符串:

^[A-Za-z0-9-_,\s]+[.]{1}[A-Za-z]{3}$

我想确保有一个三个字母的扩展名,并允许字母、数字和以下符号: - _ 、 \s 在它之前,但我不想在文件名中包含所有字母和字符。我可以只使用 * 而不是 + 但这将匹配 0 或更多,这不是有效的文件名。

以下是规则应如何反应的一些示例:

Correct file name.pdf - true
Correct, file name.pdf - true
Correct_file_name.pdf - true
Correctfilename.pdf - true
Incorrect &% file name.pdf - false
Incorrect file name- false

如果有人能指出我正确的方向,那就太好了。

谢谢

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以改用这些表达式:

    • \w - 与 [a-zA-Z0-9_] 相同
    • \d - 与 [0-9] 相同
    • \. - 与 [.]{1} 相同

    这将使您的正则表达式:

    ^[\w,\s-]+\.[A-Za-z]{3}$
    

    请注意,字符类中的文字破折号必须在第一个或最后一个或转义(我把它放在最后),但你把它放在中间,它错误地变成了一个范围

    请注意,最后的 [a-zA-Z] 不能被 \w 替换,因为 \w 包含下划线字符和数字。

    已编辑: @tomasz 是对的! \w == [a-zA-Z0-9_](已确认here),所以我更改了答案,从第一个字符类中删除了不必要的\d

    【讨论】:

    • \w 通常是 [a-zA-Z0-9_];这就是为什么我不是这门课的忠实粉丝,因为你必须记住这个特定的单词定义。
    • 太棒了,这是一种享受,谢谢!你能解释一下为什么我的模式不起作用吗?这是我在定义句号时错过了 \ 的事实吗?
    • 对于更通用的用法,可以是 ^[\w,\s-]+\.[A-Za-z]+$,它将匹配所有至少有 1 个字符的扩展。这现在将接受诸如 web.config 之类的文件
    • 如果文件被命名为 something.mp4,这将不起作用
    • @yannicuLar 因为问题要求匹配具有 3 个字母而不是字符的扩展名。使扩展部分适应您的需求很简单,例如[a-zA-Z0-9]{2,4}
    【解决方案2】:

    这个问题是专门为允许三个字母的扩展名而提出的。

    对于像我一样来自 DuckDuckGo 的任何人(是的,你不应该使用 Google :p),这个正则表达式测试 Windows、Unix 和 macOS 上的有效文件名和文件路径:

    ^[^<>:;,?"*|/]+$
    

    注意:在 Windows 上,\ 不允许出现在文件名中,但上述正则表达式可用于检查 Windows 上的有效路径。如果您希望它检查有效的文件名而不是检查路径,请将 \\ 包含在括号 ^[...]+$ 之间。

    【讨论】:

    • 请注意,在 Windows 上;和 , 是有效的文件名字符,所以它变成: ^[^*?"\\>:|]+$
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多