Can this date-validation function can be simplified further or is it the correct approach?
Can this be simplified ? Most certainly.


You can take advantage of the fact that new Date( 'APR 04 1977' ) and new Date( '04 04 1977' ) both work, so you don't need getMonthFromString
You can take more out of regexes with capturing groups
You can get rid of the whole Sandbox construct which does not make a lot of sense to me
You can write it so that the validator can accept but num:true and num:false, it can only make the user happier ;)
Not too excited by YY, we spent billions fixing Y2K, and here you come creating more trouble ;)
You don't need value if you have element ( simply call val() )
isValidDate seems overkill, if you ask for 30 feb 2014, then testDate.getTime() will be NaN


My counter proposal code is about 1/3rd of yours:

function DateHandler(elementId, _mandatory) {
    this.$dateField = $('#' + elementId);
    this.mandatory = _mandatory || false;
    this.$dateField.on('keyup focusout', this.validate.bind(this));
}

DateHandler.prototype.validate = function () {
    this.error('');
    var text = this.$dateField.val().toUpperCase(), matches;
    if (text.length === 0) {
        if (mandatory) {
            this.error('Field should not be empty');
        }
        return;
    } else if (text.length == 6) {
        matches = /([0-3][0-9])([0-1][0-9])(\d\d)/.exec(text);
    } else if (text.length == 7) {
        matches = /([0-3][0-9])(\w\w\w)(\d\d)/.exec(text);
    }
    if (!matches) {
        return this.error('Field should be of format DDMMYY or DDMMMYY');
    }
    value = new Date(matches[2] + ' ' + matches[1] + " " + (matches[3] &lt; 50 ? 20 : 19) + matches[3]);
    if (isNaN(value.getTime())) {
        return this.error('Not a valid date');
    }
    console.log(value);
};

DateHandler.prototype.error = function (message) {
    var label = this.$dateField.siblings('span');
    message ? label.html(message).show() : label.hide();
};

var dateHandler1 = new DateHandler('d1');
var dateHandler2 = new DateHandler('d2');


I tested this fairly well on JsFiddle: http://jsfiddle.net/konijn_gmail_com/985ut/