Path Validator

Class for validating file or folder path patterns

Use this to be sure the path is using well qualified names : no strange characters, all rules are tested.
This script is part of the Poor Man's SMS project that you can download here, or get more info there.

File Name : PathValidatorCLS.js
Requirement : none
Author : Branimir Petrovic
Submitted : 02/12/2001
Updated : 19/09/2002
Category : Class

To use a class, follow this syntax :
var MyObjClass = new MyClass;
WScript.Echo(MyObjClass.MyMethod());
//  FileName:   PathValidatorCLS.js
//////////////////////////////////////////////////////////////////////
if (WScript.ScriptName == "PathValidatorCLS.js") { demo_PathValidatorCLS(); }

// ======================== CLASS ====================================
function PathValidatorCLS() {
//  Author:     Branimir Petrovic
//  Date:       1 January 2002
//  Version:    1.2.0
//
//  Revision History:
//      2 January   2002    V 1.1.0     Added lines with: //    <<<
//      13 January  2002    V 1.2.0     Added getVersion() method
//
//  Methods:
//      - getClassName()            //  Returns "PathValidatorCLS"
//      - getVersion()              //  Returns version string "1.2.0"
//      - isValidPath(sFQP)
//      - isLocalPath(sFQP)
//      - isUNCPath(sFQP)
//      - getComputerName(sFQP)     //  For valid local paths - returns local computer name
                                    //  For valid UNC paths - returns remote computer name
//  Note:
//      isLocalPath and isUNCPath will return meaningful values only if passed path is valid,
//      otherwise returned value will be "undefined" (which would be evaluated as false)

    //  --- Private Data Members ---
    var SELF = "PathValidatorCLS";
    var VERSION = "1.2.0";
    var sComputerName;
    var fLocalPath;
    var fUNCPath;

    //////////////////////////////////////////////////////////////////
    this.getClassName = function () { return SELF; }
    this.getVersion = function () { return VERSION; }
    this.isValidPath = isValidPath;
    this.isLocalPath = isLocalPath;
    this.isUNCPath = isUNCPath;
    this.getComputerName = getComputerName;

    //  ---------------- Constructor's work ends here ----------------
    function isValidPath(sFQP) {
    //  Based on V 1.0.1 from 26 Nov 2001
    //  Added functionality for "catching" computer name and local path flag

        sComputerName = void 0; //  <<< Added 2 Jan 2002
        fLocalPath = void 0;    //  <<< Added 2 Jan 2002
        fUNCPath = void 0;      //  <<< Added 2 Jan 2002

        //  rule #0 -> Path must not be longer than 255 characters
        if (typeof(sFQP)!="string") return false;       //  >>>
        if (sFQP.length>255) return false;              //  >>>
        //  rule #1 -> Drive letter & colon pattern:
        var regDrv = /^[A-Za-z]:$/;
        //  rule #2 -> One char name (not allowed chars: .\/*?<>| :")
        var regOneCharName = /^[^.\*/\?<>\|:\" ]$/;
        //  rule #3 -> Two char name:   -must not start or end with '.' or ' '
        //                              -not allowed chars: \/*?<>|"    
        var regTwoCharNameA = /^[^.\*/\?<>\| :\"][^\*/\?<>\| :\"]$/;
        var regTwoCharNameB = /^[^\*/\?<>\| :\"][^.\*/\?<>\| :\"]$/;
        //  rule #4 -> Three or more chars (rule #3 apply as well)
        var regThrPlusCharName = /^[^.\*/\?<>\| :\"][^\*/\?<>\|:\"]+[^.\*/\?<>\| :\"]$/;

        var sAry = sFQP.split("\");
        var nUBound = sAry.length;
        if (nUBound<2) return false;                    //  >>>
        
        if ( (sAry[0]=="")&&(sAry[1]=="")) {
            //  Looks like it is UNC format, but test
            //  individual path slices for compliance:
            if (sAry.length<4) {
                //  spliced UNC path has at least 4 item long array
                return false;                           //  >>>
            }

            for (var i=2; i<nUBound; i++) {
                if (i==(nUBound-1)) {
                    //  test the very last 'slice'
                    if (sAry[i]=="") {
                        fUNCPath = true;                //  <<< Added 2 Jan 2002
                        fLocalPath = false;             //  <<< Added 2 Jan 2002
                        return true;                    //  >>> empty is OK
                    } else {
                        fUNCPath = true;                //  <<< Added 2 Jan 2002
                        fLocalPath = false;             //  <<< Added 2 Jan 2002
                        return isNameOK(sAry[i]);       //  >>> could be OK 
                    }
                }
                //  test every other 'slice' (but the last)
                if (!isNameOK(sAry[i])) return false;   //  >>> name is NOT OK
                if (i==2) sComputerName = sAry[i]       //  <<< Added 2 Jan 2002
            }

        } else if (!regDrv.test(sAry[0]) ) return false;//  >>> drive letter is NOT OK
            //  test local path slices for naming rules compliance

        sComputerName = computerName();                 //  <<< Added 2 Jan 2002

        for (var i=1; i<nUBound; i++) {
            if (i==(nUBound-1)) {
                //  the very last 'slice'
                if (sAry[i]=="") {
                    fLocalPath = true;                  //  <<< Added 2 Jan 2002
                    fUNCPath = false;                   //  <<< Added 2 Jan 2002
                    return true;                        //  >>> empty is OK
                }
                else {
                    fLocalPath = true;                  //  <<< Added 2 Jan 2002
                    fUNCPath = false;                   //  <<< Added 2 Jan 2002
                    return isNameOK(sAry[i]);           //  >>> name is OK
                }
            }
            if (!isNameOK(sAry[i])) return false;       //  >>> name is NOT OK
        }
        
        //  --- Inner (helper) function
        function isNameOK(sName) {
            if (!sName) return false;
            var nL = sName.length

            switch (nL) {
                case 1 :
                    return regOneCharName.test(sName);
                case 2 :
                    return regTwoCharNameA.test(sName)&®TwoCharNameB.test(sName);
                default :
                return regThrPlusCharName.test(sName);
            }
        }
    }
    //  --------------------------------------------------------------
    function isLocalPath(sFQP) {
        return isValidPath(sFQP)&&fLocalPath;
    }
    //  --------------------------------------------------------------
    function isUNCPath(sFQP) {
        return isValidPath(sFQP)&&fUNCPath;
    }
    //  --------------------------------------------------------------
    function getComputerName(sFQP) {
        if (isValidPath(sFQP)) return sComputerName;
        else return "";
    }

    //  ---------------- Helper Functions ----------------------------
    function computerName() { return WScript.CreateObject("WScript.Network").ComputerName; }
}   // ======================== END OF CLASS =========================

//  ==================================================================
function demo_PathValidatorCLS() {
    var oVal = new PathValidatorCLS();
    var sPath1 = "\\Computer9\_`~!@#$%^&()[{]};'.,-_+=\MyFldr2\myfile.ext\";
    var sPath2 = "C:\Documents and Settings\TRFFC02.ICO";

    var sMsg = "Test with UNC path: \n";
    sMsg += "oVal.isValidPath(\"" + sPath1 + "\") == ";
    sMsg +=  (oVal.isValidPath(sPath1)? "true": "false") + "\n";
    sMsg += "oVal.isLocalPath(\"" + sPath1 + "\") == " + oVal.isLocalPath(sPath1) + "\n";
    sMsg += "oVal.isUNCPath(\"" + sPath1 + "\") == " + oVal.isUNCPath(sPath1) + "\n";
    sMsg += "oVal.getComputerName(\"" + sPath1 + "\") == " + oVal.getComputerName(sPath1) + "\n\n";

    sMsg += "Test with local path: \n";
    sMsg += "oVal.isValidPath(\"" + sPath2 + "\") == ";
    sMsg +=  (oVal.isValidPath(sPath2)? "true": "false") + "\n";
    sMsg += "oVal.isLocalPath(\"" + sPath2 + "\") == " + oVal.isLocalPath(sPath2) + "\n";
    sMsg += "oVal.isUNCPath(\"" + sPath2 + "\") == " + oVal.isUNCPath(sPath2) + "\n";
    sMsg += "oVal.getComputerName(\"" + sPath2 + "\") == " + oVal.getComputerName(sPath2) + "\n\n";

    WScript.Echo(sMsg);
}
//  ==================================================================
Server Info
Remote Info
Compress

Batchs
BootSector
Droit
Accessoire GFA
On Now
Ecran plasma
Système d'exploitation
Son
Unités
Scripting
Multilingue
Site Web
Bruit et son
Architecture Google


4K
Color picker
TaskList
Backup files
Mini Port Scanner
Website To CHM
PixyDemo
Web password recovery
4KWebServer
Kill Popup
VBE decoder
Script Optimizer
Database Password Recovery
Class
Ini
EMail validator
Graphical Class
MP3 Info
Pinger Class
IP ranger class
SoftwareMetering
Path Validator
Time Stamper Class
LoggerCLS
HTA
Keyword Ranking
DOM Explorer
HTA-Notepad
PixyPortManager
Other
flashMessage
Kill Popup
VBE decoder (fixed)
Error Codes
Maze generator
Char counter
HTML To Word
ICQ Choose User
ScreenSaver Password decoder
Mp3Playlister - singleList
Long Filename To Short
Trace Math
Dump Hexa File
Self modifying script
Mp3Playlister - multiList
HTANoid
PixyWebServer
Python
Progress indication

©2002 Jean-Luc Antoine. All Rights Reserved. Scripts or any other material on this website may not be redistributed or put as part of ANY collection (script archives, CDs etc) without prior written permission. Permission granted to use and modify any of the scripts found on InterClasse.com