我正在尝试使用此模式测试文件名字符串:
^[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
如果有人能指出我正确的方向,那就太好了。
由于
答案 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上的有效路径。如果您希望检查有效的文件名而不检查路径,请在方括号\\
之间加^[...]+$
。