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

时间:2016-10-11 15:39:21

标签: java regex icefaces

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

  

^ {0100} +(ASF |。AVI | CSV | PDF | DOC |的docx |点| EML | GIF | HTM | HTML | IDX | TIF | JPG | JPEG | BMP | PNG | MP3 | MPG |味精| PPT | PPTX |科普| RTF | TXT | WAV | WMA | XLS | XLSX |拉链“+   “| ASF | ASI | CSV | PDF | DOC | DOCX | DOT | EML | GIF | HTM | HTML | IDX | TIF | JPG | JPEG | BMP | PNG | MP3 | MPG |留言| PPT | PPTX | PST | RTP | TXT | WAV | WMA | XLS | XLSX | ZIP)

2 个答案:

答案 0 :(得分:2)

  

文件名长度应小于15

这可以通过积极的前瞻(?=.{0,15}$)来实现。然而,在前瞻性负面的情况下,这种情况可以更优雅地表达出来。我们可以在开始时使用(?!.{16})负向预测,这意味着如果有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)$

答案 1 :(得分:0)

通过使用扩展来保持主要部分简单,保持简单:

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