用正则表达式测试文件名

时间:2011-07-20 21:28:30

标签: regex

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

^[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

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

由于

2 个答案:

答案 0 :(得分:46)

您可以改用这些表达式:

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

哪会使你的正则表达式:

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

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

请注意,\w无法替换最后一个[a-zA-Z],因为\w包含下划线字符和数字。

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

答案 1 :(得分:6)

此问题专门要求三个字母的扩展名

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

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

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