文件名的正则表达式 - 限制名称大小和文件扩展名

regular expression for file name - limit name size and file extention

我需要 icefaces 输入文件组件的正则表达式,文件名长度应小于 15 个字符并具有适当的扩展名。我写了这个,但它失败了:

^.{0,100}.+.(asf|avi|csv|pdf|doc|docx|dot|eml|gif|htm|html|idx|tif|jpg|jpeg|bmp|png|mp3|mpg|msg|ppt|pptx|pst|rtf|txt|wav|wma|xls|xlsx|zip"+ "|ASF|ASI|CSV|PDF|DOC|DOCX|DOT|EML|GIF|HTM|HTML|IDX|TIF|JPG|JPEG|BMP|PNG|MP3|MPG|MSG|PPT|PPTX|PST|RTP|TXT|WAV|WMA|XLS|XLSX|ZIP)

file name length should be less than 15

这可以通过积极的前瞻来实现 (?=.{0,15}$)。但是,如果使用负前瞻,则可以更优雅地表达这种情况。我们可以使用 (?!.{16}) negative lookahead 锚定在开头,这意味着如果有 16 个字符,匹配应该失败。

要缩短模式,您还可以使用 embedded flag expression (?i)

所以,您可以使用

(?i)^(?!.{16}).+[.](?:asf|avi|csv|pdf|doc|docx|dot|eml|gif|htm|html|idx|tif|jpg|jpeg|bmp|png|mp3|mpg|msg|ppt|pptx|pst|rtf|txt|wav|wma|xls|xlsx|zip)$

参见regex demo

请注意,.+ 将匹配除换行符以外的任何 1+ 个字符,尽可能多,直到最后一个 . 后跟其中一个扩展名。

带有 ? 个量词的略微缩短的版本:

(?i)^(?!.{16}).+[.](?:asf|avi|csv|pdf|docx?|dot|eml|gif|html?|idx|tif|jpe?g|bmp|png|mp[3g]|msg|pptx?|pst|rtf|txt|wav|wma|xlsx?|zip)$

通过对扩展使用前瞻性来保持主要部分的简单性,从而保持简单:

^(?=.*\.(?i)(asf|avi|...etc...|zip)$).{,14}$