📄 validation_cn.js
字号:
elm[prop] = '';
}
elm.removeClassName('validation-failed');
elm.removeClassName('validation-passed');
});
},
add : function(className, error, test, options) {
var nv = {};
nv[className] = new Validator(className, error, test, options);
Object.extend(Validation.methods, nv);
},
addAllThese : function(validators) {
var nv = {};
$A(validators).each(function(value) {
nv[value[0]] = new Validator(value[0], value[1], value[2], (value.length > 3 ? value[3] : {}));
});
Object.extend(Validation.methods, nv);
},
get : function(name) {
var resultMethodName;
for(var methodName in Validation.methods) {
if(name == methodName) {
resultMethodName = methodName;
break;
}
if(name.indexOf(methodName) >= 0) {
resultMethodName = methodName;
}
}
return Validation.methods[resultMethodName] ? Validation.methods[resultMethodName] : new Validator();
//return Validation.methods[name] ? Validation.methods[name] : new Validator();
},
// 通过classname传递的参数必须通过'-'分隔各个参数
getArgumentsByClassName : function(prefix,className) {
if(!className || !prefix)
return [];
var pattern = new RegExp(prefix+'-(\\S+)');
var matchs = className.match(pattern);
if(!matchs)
return [];
var results = [];
var args = matchs[1].split('-');
for(var i = 0; i < args.length; i++) {
if(args[i] == '') {
if(i+1 < args.length) args[i+1] = '-'+args[i+1];
}else{
results.push(args[i]);
}
}
return results;
},
assert : function(condition,message) {
var errorMessage = message || ("assert failed error,condition="+condition);
if (!condition) {
alert(errorMessage);
throw new Error(errorMessage);
}else {
return condition;
}
},
methods : {}
});
Validation.add('IsEmpty', '', function(v) {
return ((v == null) || (v.length == 0)); // || /^\s+$/.test(v));
});
Validation.addAllThese([
['required', Validator.messages['required'], function(v) {
return !(Validation.get('IsEmpty').test(v) || /^\s+$/.test(v));
}],
['validate-number', Validator.messages['validate-number'], function(v) {
return Validation.get('IsEmpty').test(v) || (!isNaN(v) && !/^\s+$/.test(v));
}],
['validate-digits', Validator.messages['validate-digits'], function(v) {
return Validation.get('IsEmpty').test(v) || !/[^\d]/.test(v);
}],
['validate-alpha', Validator.messages['validate-alpha'], function (v) {
return Validation.get('IsEmpty').test(v) || /^[a-zA-Z]+$/.test(v)
}],
['validate-alphanum', Validator.messages['validate-alphanum'], function(v) {
return Validation.get('IsEmpty').test(v) || !/\W/.test(v)
}],
['validate-date', Validator.messages['validate-date'], function(v) {
var test = new Date(v);
return Validation.get('IsEmpty').test(v) || !isNaN(test);
}],
['validate-email', Validator.messages['validate-email'], function (v) {
return Validation.get('IsEmpty').test(v) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)
}],
['validate-url', Validator.messages['validate-url'], function (v) {
return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)
}],
['validate-date-au', Validator.messages['validate-date-au'], function(v) {
if(Validation.get('IsEmpty').test(v)) return true;
var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
if(!regex.test(v)) return false;
var d = new Date(v.replace(regex, '$2/$1/$3'));
return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) &&
(parseInt(RegExp.$1, 10) == d.getDate()) &&
(parseInt(RegExp.$3, 10) == d.getFullYear() );
}],
['validate-currency-dollar', Validator.messages['validate-currency-dollar'], function(v) {
// [$]1[##][,###]+[.##]
// [$]1###+[.##]
// [$]0.##
// [$].##
return Validation.get('IsEmpty').test(v) || /^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)
}],
['validate-one-required', Validator.messages['validate-one-required'], function (v,elm) {
var p = elm.parentNode;
var options = p.getElementsByTagName('INPUT');
return $A(options).any(function(elm) {
return $F(elm);
});
}]
]);
//custom validate start
Validation.addAllThese([
['validate-date-cn', Validator.messages['validate-date-cn'], function(v) {
if(Validation.get('IsEmpty').test(v)) return true;
var regex = /^(\d{4})-(\d{2})-(\d{2})$/;
if(!regex.test(v)) return false;
var d = new Date(v.replace(regex, '$1/$2/$3'));
return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) &&
(parseInt(RegExp.$3, 10) == d.getDate()) &&
(parseInt(RegExp.$1, 10) == d.getFullYear() );
}],
['validate-integer', Validator.messages['validate-integer'], function(v) {
return Validation.get('IsEmpty').test(v) || (/^[-+]?[\d]+$/.test(v));
}],
['validate-chinese', Validator.messages['validate-chinese'], function(v) {
return Validation.get('IsEmpty').test(v) || (/^[\u4e00-\u9fa5]+$/.test(v));
}],
['validate-ip', Validator.messages['validate-ip'], function(v) {
return Validation.get('IsEmpty').test(v) || (/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(v));
}],
['validate-phone', Validator.messages['validate-phone'], function(v) {
return Validation.get('IsEmpty').test(v) || /^((0[1-9]{3})?(0[12][0-9])?[-])?\d{6,8}$/.test(v);
}],
['validate-mobile-phone', Validator.messages['validate-mobile-phone'], function(v) {
return Validation.get('IsEmpty').test(v) || (/(^0?[1][35][0-9]{9}$)/.test(v));
}],
/**
* Usage : validate-equals-otherInputId
* Example : validate-equals-username or validate-equals-email etc..
*/
['validate-equals',Validator.messages['validate-equals'], function(v,elm,args,metadata) {
return Validation.get('IsEmpty').test(v) || $F(args[0]) == v;
}],
/**
* Usage : less-than-otherInputId
*/
['less-than',Validator.messages['less-than'], function(v,elm,args,metadata) {
if(Validation.get('validate-number').test(v) && Validation.get('validate-number').test($F(args[0])))
return Validation.get('IsEmpty').test(v) || parseFloat(v) < parseFloat($F(args[0]));
return Validation.get('IsEmpty').test(v) || v < $F(args[0]);
}],
/**
* Usage : great-than-otherInputId
*/
['great-than',Validator.messages['great-than'], function(v,elm,args,metadata) {
if(Validation.get('validate-number').test(v) && Validation.get('validate-number').test($F(args[0])))
return Validation.get('IsEmpty').test(v) || parseFloat(v) > parseFloat($F(args[0]));
return Validation.get('IsEmpty').test(v) || v > $F(args[0]);
}],
/*
* Usage: min-length-number
* Example: min-length-10
*/
['min-length',Validator.messages['min-length'],function(v,elm,args,metadata) {
return Validation.get('IsEmpty').test(v) || v.length >= parseInt(args[0]);
}],
/*
* Usage: max-length-number
* Example: max-length-10
*/
['max-length',Validator.messages['max-length'],function(v,elm,args,metadata) {
return Validation.get('IsEmpty').test(v) || v.length <= parseInt(args[0]);
}],
/*
* Usage: validate-file-type1-type2-typeX
* Example: validate-file-png-jpg-jpeg
*/
['validate-file', function(v,elm,args,metadata) {
return Validator.format(Validator.messages['validate-file'],[args.join(',')]);
},function(v,elm,args,metadata) {
return Validation.get('IsEmpty').test(v) || $A(args).any(function(extentionName) {
return new RegExp('\\.'+extentionName+'$','i').test(v);
});
}],
/*
* Usage: validate-float-range-minValue-maxValue
* Example: -2.1 to 3 = validate-float-range--2.1-3
*/
['validate-float-range', Validator.messages['validate-float-range'],function(v,elm,args,metadata) {
return Validation.get('IsEmpty').test(v) || (parseFloat(v) >= parseFloat(args[0]) && parseFloat(v) <= parseFloat(args[1]))
},{depends : ['validate-number']}],
/*
* Usage: validate-int-range-minValue-maxValue
* Example: -10 to 20 = validate-int-range--10-20
*/
['validate-int-range',Validator.messages['validate-int-range'],function(v,elm,args,metadata) {
return Validation.get('IsEmpty').test(v) || (parseInt(v) >= parseInt(args[0]) && parseInt(v) <= parseInt(args[1]))
},{depends : ['validate-integer']}],
/*
* Usage: validate-length-range-minLength-maxLength
* Example: 10 to 20 = validate-length-range-10-20
*/
['validate-length-range', Validator.messages['validate-length-range'],function(v,elm,args,metadata) {
return Validation.get('IsEmpty').test(v) || (v.length >= parseInt(args[0]) && v.length <= parseInt(args[1]))
}],
/*
* Usage: max-value-number
* Example: max-value-10
*/
['max-value',Validator.messages['max-value'] ,function(v,elm,args,metadata) {
return Validation.get('IsEmpty').test(v) || parseFloat(v) <= parseFloat(args[0]);
},{depends : ['validate-number']}],
/*
* Usage: min-value-number
* Example: min-value-10
*/
['min-value',Validator.messages['min-value'],function(v,elm,args,metadata) {
return Validation.get('IsEmpty').test(v) || parseFloat(v) >= parseFloat(args[0]);
},{depends : ['validate-number']}],
/*
* Usage: validate-pattern-RegExp
* Example: <input id='sex' class='validate-pattern-/^[fm]$/i'>
*/
['validate-pattern',Validator.messages['validate-pattern'],function(v,elm,args,metadata) {
var extractPattern = /validate-pattern-\/(\S*)\/(\S*)?/;
Validation.assert(extractPattern.test(elm.className),"invalid validate-pattern expression,example: validate-pattern-/a/i");
elm.className.match(extractPattern);
return Validation.get('IsEmpty').test(v) || new RegExp(RegExp.$1,RegExp.$2).test(v);
}],
/*
* Example: <input id='email' class='validate-ajax' validateUrl='http://localhost:8080/validate-email.jsp' validateFailedMessage='email already exists'>
*/
['validate-ajax',function(v,elm,args,metadata) {
return elm.getAttribute('validateFailedMessage') || Validator.messages['validation-failed'];
},function(v,elm,args,metadata) {
Validation.assert(elm.getAttribute('validateUrl'),'element validate by ajax must has "validateUrl" attribute');
//Validation.assert(elm.getAttribute('validateFailedMessage'),'element validate by ajax must has "validateFailedMessage" attribute');
if(elm._ajaxValidating && elm._hasAjaxValidateResult) {
elm._ajaxValidating = false;
elm._hasAjaxValidateResult = false;
return elm._ajaxValidateResult;
}
var sendRequest = function() {
new Ajax.Request(elm.getAttribute('validateUrl'),{
parameters : Form.Element.serialize(elm),
onSuccess : function(response) {
if('true' != response.responseText.strip() && 'false' != response.responseText.strip())
Validation.assert(false,'validate by ajax,response.responseText must equals "true" or "false",actual='+response.responseText);
elm._ajaxValidateResult = eval(response.responseText);
elm._hasAjaxValidateResult = true;
Validation.test('validate-ajax',elm);
}
});
elm._ajaxValidating = true;
return true;
}
return elm._ajaxValidating || Validation.get('IsEmpty').test(v) || sendRequest();
}]
]);
Validation.validations = {};
Validation.autoBind = function() {
var forms = document.getElementsByClassName('required-validate');
$A(forms).each(function(form){
var validation = new Validation(form,{immediate:true});
Event.observe(form,'reset',function() {validation.reset();},false);
});
};
Validation.$ = function(id) {
return Validation.validations[id];
}
Event.observe(window,'load',Validation.autoBind,false);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -