/** * 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; };