用正则表达式测试文件名

eb_*_*Dev 33 regex

我试图用这种模式测试文件名字符串:

^[A-Za-z0-9-_,\s]+[.]{1}[A-Za-z]{3}$
Run Code Online (Sandbox Code Playgroud)

我想确保有三个字母的扩展名,并允许字母,数字和这些符号: - _,\ 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
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Boh*_*ian 52

您可以使用这些表达式:

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

这将使你的正则表达式:

^[\w,\s-]+\.[A-Za-z]{3}$
Run Code Online (Sandbox Code Playgroud)

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

请注意,最后一个[a-zA-Z]不能替换为\w因为\w包括下划线字符和数字.

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

  • `\ w`通常是[a-zA-Z0-9_]; 这就是为什么我不是班上的忠实粉丝,因为你必须记住这个特定的单词定义. (4认同)
  • 如果文件名为something.mp4,我不会这样做 (4认同)
  • 对于更通用的用法,可以是 ^[\w,\s-]+\.[A-Za-z]+$ ,它将匹配所有至少有 1 个字符的扩展名。现在将接受一个文件,例如 web.config (2认同)

MS *_*nds 7

这个问题被特别要求允许三个字母的延伸.

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

^[^<>:;,?"*|/]+$
Run Code Online (Sandbox Code Playgroud)

注意:在Windows上,\文件名中不允许使用,但上述正则表达式适用于检查Windows上的有效路径.如果要检查有效文件名而不检查路径,请\\在括号之间包含^[...]+$.

  • 请注意,在 Windows 上;和 , 是有效的文件名字符,因此它变为: ^[^&lt;/*?"\\&gt;:|]+$ (2认同)