首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > windows >

【转】Windows平台上用正则验证文件名是否合法

2012-09-10 
【转】Windows平台下用正则验证文件名是否合法转载地址:http://www.g2w.me/2011/07/validate-file-name-with

【转】Windows平台下用正则验证文件名是否合法

转载地址:http://www.g2w.me/2011/07/validate-file-name-with-regex/

?


那么一个合法的文件(Win下)应该符合如下规则 .

    文件名不能为空,空在这里有两个意思 文件名(包括扩展名)长度为0或仅由空字符组成(包括\t\b等不可见的转义字符)文件名和扩展名不能同时为空.但实际上我们可以用程序创建出类似.project,..txt等形式的文件,但却创建不出类似abc.的文件文件名中不能包含\/:*?”<>|中的任意字符文件名(包括扩展名)的长度不得大于255个字符

事实上形如”..”(不包含引号,下同)的文件也不能被创建.
不合法的文件还有类似” aa”, “aa “, “aa.”(会被创建为”aa”,也把它算作不合法),”a\ta”(\t为制表符等不可见字符(除空格外))

于是我们得到了文件名命名规则的更详细规定:

    首尾不能有空字符(空格、制表符、换页符等空白字符的其中任意一个),文件名尾不能为.号文件名和扩展名不能同时为空文件名中不能包含\/:*?”<>|中的任意字符文件名(包括扩展名)的长度不得大于255个字符在1.的条件下,文件名中不能出出现除空格符外的任意空字符.出现控制字符其实也算不合法,但因为情况太复杂,就不做判断了。

于是有如下匹配

首字符: [^\s\\/:\*\?"<>\|]
尾字符: [^\s\\/:\*\?"<>\|\.]
其它字符: (\x20|[^\s\\/:\*\?"<>\|])*

\s 只能匹配下面六种字符(via: ));?System.out.println(".." + "\t" + isValidFileName(".."));?System.out.println("fdsa ? ?fdsa(制表符)" + "\t" + isValidFileName("fdsa ? ?fdsa(制表符)"));?System.out.println("a.txt" + "\t" + isValidFileName("a.txt"));

结果:

null(未初始化) ? ? ?false??.xml ? false?.xml ? ?false??.xml ? false?.xml. ? false?.xml ? ?true?? ? .xml(制表符) ? false?.. ? ? ?false?fdsa ? ?fdsa(制表符) ? ? ? true?a.txt ? true

?