Files
OMS/app/desktop/statics/js/coms/validate.js
2025-12-28 23:13:25 +08:00

132 lines
5.1 KiB
JavaScript

/**
* Shopex OMS
*
* Copyright (c) 2025 Shopex (http://www.shopex.cn)
* Licensed under Apache-2.0 with additional terms (See LICENSE file)
*/
var validatorMap = new Hash({
'required': [LANG_Validate['required'], function(element, v) {
return v != null && v != '' && v.trim() != '';
}],
'number': [LANG_Validate['number'], function(element, v) {
return v == null || v == '' || ! isNaN(v) && ! /^\s+$/.test(v);
}],
'digits': [LANG_Validate['digits'], function(element, v) {
return v == null || v == '' || ! /[^\d]/.test(v);
}],
'unsignedint': [LANG_Validate['unsignedint'], function(element, v) {
return v == null || v == '' || (!/[^\d]/.test(v) && v > 0);
}],
'unsigned': [LANG_Validate['unsigned'], function(element, v) {
return v == null || v == '' || (!isNaN(v) && ! /^\s+$/.test(v) && v >= 0);
}],
'positive': [LANG_Validate['positive'], function(element, v) {
return v == null || v == '' || (!isNaN(v) && ! /^\s+$/.test(v) && v > 0);
}],
'alpha': [LANG_Validate['alpha'], function(element, v) {
return v == null || v == '' || /^[a-zA-Z]+$/.test(v);
}],
'alphaint': [LANG_Validate['alphaint'], function(element, v) {
return v == null || v == '' || ! /\W/.test(v) || /^[a-zA-Z0-9]+$/.test(v);
}],
'alphanum': [LANG_Validate['alphanum'], function(element, v) {
return v == null || v == '' || ! /\W/.test(v) || /^[\u4e00-\u9fa5a-zA-Z0-9]+$/.test(v);
}],
'code': [LANG_Validate['code'], function(element, v) {
return v == null || v == '' || /^[a-zA-Z0-9_-]+$/.test(v);
}],
'date': [LANG_Validate['date'], function(element, v) {
return v == null || v == '' || /^(19|20)[0-9]{2}-([1-9]|0[1-9]|1[012])-([1-9]|0[1-9]|[12][0-9]|3[01])$/.test(v);
}],
'email': [LANG_Validate['email'], function(element, v) {
return v == null || v == '' || /(\S)+[@]{1}(\S)+[.]{1}(\w)+/.test(v);
}],
'url': [LANG_Validate['url'], function(element, v) {
return v == null || v == '' || /^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*)(:(\d+))?\/?/i.test(v);
}],
'area': [LANG_Validate['area'], function(element, v) {
return element.getElements('select').every(function(sel) {
var selValue = sel.getValue();
sel.focus();
return selValue != '' && selValue != '_NULL_';
});
}],
'greater': [LANG_Validate['greater'], function(element) {
var prev=element.getPrevious('input[type=text]');
return element.getValue()==='' || element.getValue().toInt()>prev.getValue().toInt();
}],
'requiredcheckbox': [LANG_Validate['requiredonly'], function(element) {
var parent = element.getParent(),chkbox;
if(element.get('name')) chkbox = parent.getElements('input[type=checkbox][name="'+element.get('name')+'"]');
else chkbox = parent.getElements('input[type=checkbox]');
/*chkbox.removeEvents('change').addEvent('change',function(){
if(validator.test(element.form,element)){
validator.removeCaution(element);
}
});*/
return chkbox.some(function(chk) {
return chk.checked == true;
});
}],
'requiredradio': [LANG_Validate['requiredonly'], function(element) {
var parent = element.getParent(),radio;
if(element.get('name')) radio = parent.getElements('input[type=radio][name="'+element.get('name')+'"]');
else radio = parent.getElements('input[type=radio]');
/*radio.removeEvents('change').addEvent('change',function(){
if(validator.test(element.form,element)){
validator.removeCaution(element);
}
});*/
return radio.some(function(rd) {
return rd.checked == true;
});
}]
});
var validate = function(_form) {
if (!_form) return true;
var formElements = _form.match('form') ? _form.getElements('[vtype]') : [_form];
var err_log = false;
var _return = formElements.every(function(element) {
var vtype = element.get('vtype');
if (!$chk(vtype)) return true;
if (!element.isDisplay() && (element.getAttribute('type') != 'hidden')) return true;
var valiteArr = vtype.split('&&');
if (element.get('required')) {
valiteArr = ['required'].combine(valiteArr.clean());
}
return vtype.split('&&').every(function(key) {
if (!validatorMap[key]) return true;
var _caution = element.getNext('.caution');
var cautionInnerHTML = element.get('caution') || validatorMap[key][0];
if (validatorMap[key][1](element, element.getValue())) {
if (_caution && _caution.hasClass('error')) {
_caution.remove();
}
return true;
}
if (!_caution || ! _caution.hasClass('caution')) {
new Element('span', {
'class': 'error caution notice-inline',
'html': cautionInnerHTML
}).injectAfter(element);
element.removeEvents('blur').addEvent('blur', function() {
if (validate(element)) {
if (_caution && _caution.hasClass('error')) {
_caution.remove();
}
element.removeEvent('blur', arguments.callee);
}
});
} else if (_caution && _caution.hasClass('caution') && _caution.get('html') != cautionInnerHTML) {
_caution.set('html', cautionInnerHTML);
}
if(element.type!='hidden'&&element.isDisplay()&&!err_log)err_log=element;
return false;
});
});
if(_form.match('form')&&err_log){try{err_log.focus();}catch(e){}}
return _return;
};