鉴于先前引用的MSDN文档中指定的要求,以下正则表达式应该做得很好:
public static boolean isValidName(String text){ Pattern pattern = Pattern.compile( "# Match a valid Windows filename (unspecified file system). n" + "^ # Anchor to start of string. n" + "(?! # Assert filename is not: CON, PRN, n" + " (?: # AUX, NUL, COM1, COM2, COM3, COM4, n" + " CON|PRN|AUX|NUL| # COM5, COM6, COM7, COM8, COM9, n" + " COM[1-9]|LPT[1-9] # LPT1, LPT2, LPT3, LPT4, LPT5, n" + " ) # LPT6, LPT7, LPT8, and LPT9... n" + " (?:\.[^.]*)? # followed by optional extension n" + " $ # and end of string n" + ") # End negative lookahead assertion. n" + "[^<>:"/\\|?*\x00-\x1F]* # Zero or more valid filename chars.n" + "[^<>:"/\\|?*\x00-\x1F\ .] # Last char is not a space or dot. n" + "$ # Anchor to end of string. ", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.COMMENTS); Matcher matcher = pattern.matcher(text); boolean isMatch = matcher.matches(); return isMatch;}请注意,此正则表达式对文件名的长度没有施加任何限制,但是实际的文件名可能会限制为260或32767个字符,具体取决于平台。



