不多bb,应该是80%可用。除根路径如C:\\或/,后缀不要加/

public enum OSType {
    LINUX,
    WINDOWS,
    OTHERS;
}

然后判断路径是否合法:

private static final Pattern linux_path_pattern=Pattern.compile("(/([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}/)*([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255})|/)");
private static final Pattern windows_path_pattern=Pattern.compile("(^[A-Z]:((\\\\|/)([a-zA-Z0-9\\-_]){1,255}){1,255}|([A-Z]:(\\\\|/)))");

    /**
     * check path is valid in windows and linux
     * @param path path to be validate
     * @param platform valid value: linux,windows
     * @return whether the path is valid
     * **/
    public static boolean checkPathValid(String path,String platform){
        if (platform.toLowerCase().equals(OSType.LINUX.name().toLowerCase())) return checkPatternMatch(linux_path_pattern,path);
        if (platform.toLowerCase().equals(OSType.WINDOWS.name().toLowerCase())) return checkPatternMatch(windows_path_pattern,path);
        return false;
    }
    private static boolean checkPatternMatch(Pattern pattern,String target){
        return pattern.matcher(target).matches();
    }

主要思路

linux_path_pattern=Pattern.compile("(/([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}/)*([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255})|/)");

其中:

[a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}

模式1:代表以数字或字母[a-zA-Z0-9]开头,后面字母或下划线和破折号[a-zA-Z0-9_\\-]可以出现0-255次。

([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}/)*

代表上面的模式1可以出现0到多次。后面使用相同的[a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}模式来禁止后面加/

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐