原创

Linux路径校验-实战

Linux路径校验

// 校验规则:路径必须以\开头,路径不允许输入除英文.和下划线_以外的特殊字符,
// 允许输入a-zA-z0-9,路径中允许存在空格。
// 注意:使用该正则前需要对每级路径做去空格处理,该正则不能匹配路径前后空格

// 正则表达式
/^\/([\w.\s][\/]?)+(\/)?$/

js对linux路径进行预处理

// 1.去除路径两边的空格
function linuxPathInit(linuxPath){
    var str = linuxPath;
    str = str.trim();
    // 2.将正斜杠/替换为反斜杠\
    while (str.indexOf("/") > -1) {
        str = str.replace("/", "\\");
    }
    // 3.路径结尾含有多个\\的直接替换为一个
    while (str.indexOf("\\\\") > -1) {
        str = str.replace("\\\\", "\\");
    }
    // 4.去除每个路径两边的空格
    let tempStr = "";
    if (str.indexOf("/") > -1) {
        let strings = str.split("/");
        for (let i = 0; i < strings.length; i++) {
            if (i === strings.length -1) {
                tempStr += strings[i].trim()
            }else {
                tempStr += strings[i].trim()+"/"
            }
        }
        str = tempStr;
    }
    return str;
}

java对linux路径进行预处理
注意:java多出4和6步骤,是因为java和js的split函数分割字符串不一致,java会自动忽略最后一位空格

public static String linuxPathInit(String item) {
    // 1.替换路径两边的空格
    item = item.trim();
    // 2.将反斜杠\替换为正斜杠/
    while (item.contains("\\")) {
        item = item.replace("\\", "/");
    }
    // 3.路径结尾含有多个//的直接替换为一个
    while (item.contains("//")) {
        item = item.replace("//", "/");
    }
    // 4.判断最后一个字符是否有/号,如果存在flag != -1
    int flag = item.substring(item.length() - 1).indexOf("/");
    // 5.去除目录两边的空格
    StringBuilder tempitem = new StringBuilder();
    if (item.contains("/")) {
        String[] itemings = item.split("/");
        for (int j = 0; j < itemings.length; j++) {
            if (j == itemings.length -1) {
                tempitem.append(itemings[j].trim());
            }else {
                tempitem.append(itemings[j].trim()).append("/");
            }
        }
        item = tempitem.toString();
    }
    // 6.如果原始路径存在/号结尾,则补上
    if (flag != -1) {
        item += "/";
    }
    return item;    
}
正文到此结束