我试图用这种模式测试文件名字符串:
^[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从第一个字符类中删除了不必要的内容.
这个问题被特别要求允许三个字母的延伸.
对于像我这样来自DuckDuckGo的人(是的,你不应该使用Google:p),这个正则表达式测试Windows,Unix和macOS上的有效文件名和文件路径:
^[^<>:;,?"*|/]+$
Run Code Online (Sandbox Code Playgroud)
注意:在Windows上,\文件名中不允许使用,但上述正则表达式适用于检查Windows上的有效路径.如果要检查有效文件名而不检查路径,请\\在括号之间包含^[...]+$.