📄 validation.js
字号:
Inputs: none
Returns: undefined
*********************************************/
oForm.markRequired=function (){
var i, iElements=this.elements.length;
var sMarkHTML, sMarkWhere;
for(i=0; i<iElements; i++){
var oElement=this.elements[i];
// Perform onmark event handler
if(oElement.onmark && oElement.onmark()==false)
continue;
if(oElement.getAttribute("required")!=null){
sMarkHTML=this.getAttribute("insert");
sMarkWhere=this.getAttribute("mark");
if(sMarkHTML){
switch(sMarkWhere.toLowerCase()){
case "before" :
sMarkWhere="beforeBegin";
break;
default :
sMarkWhere="afterEnd";
}
oElement.insertAdjacentHTML(sMarkWhere,sMarkHTML);
}else{
var sClassName=oElement.className;
if(sClassName!="required"){
oElement.setAttribute("nonreqClass",oElement.className);
oElement.className="required";
}else{
oElement.className=_validation.setDefault(oElement.getAttribute("nonreqClass"),oElement.className);
oElement.removeAttribute("nonreqClass");
}
}
}
}
}
var sValidateWhen=oForm.getAttribute("validate");
if (sValidateWhen!=null){
//
// Capture and replace onreset and onsubmit event handlers
//
oForm.fSubmit=oForm.onsubmit;
oForm.fReset=oForm.onreset;
// Create new event handlers
oForm.onsubmit=function (){
var i, oElement, iElements=this.elements.length;
// Restore all elements to original style
for (i=0; i<iElements; i++)
this.elements[i].restore();
// Validate individual elements
for(i=0;i<iElements;i++){
oElement=this.elements[i];
// Perform default validation for element
if (!oElement.valid()){
_err.raise();
event.returnValue=false;
return;
}
}
// Perform original onsubmit event handler
if (this.fSubmit && this.fSubmit()==false){
event.returnValue=false;
return;
}
// Insert default values just before submit
var vDefault;
for(i=0;i<iElements;i++){
oElement=this.elements[i];
vDefault=oElement.getAttribute("default");
if(vDefault && !oElement.value)
oElement.value=vDefault;
}
}
oForm.onreset=function (){
var i, iElements=this.elements.length;
for (i=0; i<iElements; i++)
this.elements[i].restore();
// Perform original event handler if present
if (this.fReset && this.fReset()==false)
event.returnValue=false;
}
}
oForm.bProcessed=true;
}
// Create Input methods
var j, iElements=oForm.elements.length;
for(j=0; j<iElements; j++){
var oElement=oForm.elements[j];
if(!oElement.bProcessed) {
// All event handlers are presumed to be strings/functions
// at parse-time and assigned only as functions at run-time.
// Create custom onvalidate event handlers
var vOnValidate=oElement.getAttribute("onvalidate");
if(vOnValidate){
if(typeof vOnValidate!="function")
oElement.onvalidate=new Function(vOnValidate);
else
oElement.onvalidate=vOnValidate;
}
// Create custom handler for onvalidatefocus event
var vOnValidateFocus=oElement.getAttribute("onvalidatefocus");
if(vOnValidateFocus){
if(typeof vOnValidateFocus!="function")
oElement.onvalidatefocus=new Function(vOnValidateFocus);
else
oElement.onvalidatefocus=vOnValidateFocus;
}
// Custom onmark event handler
var vOnMark=oElement.getAttribute("onmark");
if(vOnMark){
if(typeof vOnMark!="function")
oElement.onmark=new Function(vOnMark);
else
oElement.onmark=vOnMark;
}
// Custom onkeypress filtering for text fields
if(oElement.onkeypress)
oElement.fKeypress=oElement.onkeypress;
oElement.onkeypress=function (){
if(this.fKeypress && this.fKeypress()==false)
event.returnValue=false;
var sFilter=this.getAttribute("filter");
if(sFilter){
var sKey=String.fromCharCode(event.keyCode);
var re=new RegExp(sFilter);
// Do not filter out ENTER!
if(sKey!="\r" && !re.test(sKey))
event.returnValue=false;
event.keyCode=sKey.charCodeAt(0);
}
}
// Custom onchange validation
if(sValidateWhen=="onchange") {
// Capture and replace onchange event handlers
if(oElement.onchange)
oElement.fChange=oElement.onchange;
oElement.onchange=function (){
this.restore();
if(!this.valid()){
_err.raise();
event.returnValue=false;
}
if(this.fChange && this.fChange()==false){
event.returnValue=false;
}
}
}
/***********************************
Method: Input.paint
Purpose: Change style of element
Inputs: none
Returns: undefined
***********************************/
oElement.paint=function(){
var sColor = _validation.setDefault(
this.getAttribute("invalidColor"),
this.form.getAttribute("invalidColor") );
if (!sColor){
// Paint element by changing class
this.setAttribute("oldClass", this.className);
this.className = "invalid";
}else{
// Paint element by changing color directly
this.setAttribute("bg", this.style.backgroundColor);
this.style.backgroundColor = sColor;
}
}
/********************************************
Method: Input.restore
Purpose: Restore element to original style
Inputs: none
Returns: undefined
********************************************/
oElement.restore=function () {
var sBG=this.getAttribute("bg");
if (sBG!=null) {
// Revert to previous background color
this.style.backgroundColor = sBG;
this.removeAttribute("bg");
}else{
var sOldClass=this.getAttribute("oldClass");
if (sOldClass!=null){
// Revert to previous class
this.className=sOldClass;
this.removeAttribute("oldClass");
}
}
}
/**********************************************
Method: Input.valid
Purpose: Validate an element based on the
attributes provided in the HTML text
Inputs: none
Returns: boolean
**********************************************/
oElement.valid=function (){
var sType=this.type;
if(sType=="text" || sType=="textarea" || sType=="file"){
// Trim leading and trailing spaces
if(this.form.getAttribute("notrim")==null)
this.value = this.value.trim();
// Remove any Server Side Include text
if(this.form.getAttribute("ssi")==null){
while (this.value.search("<!-"+"-#") > -1)
this.value = this.value.replace("<"+"!--#", "<"+"!--");
}
}
// REQUIRED
if(this.getAttribute("required")!=null && !this.value){
_err.add(this, _validation.REQUIRED, null);
return false;
}
// FLOAT
var sFloatDelimiter=this.getAttribute("float");
var bSigned=this.getAttribute("signed")!=null;
if (sFloatDelimiter!=null && this.value){
// Assign default value to delimiter
sFloatDelimiter=(sFloatDelimiter==",")?",":"\\.";
var re=new RegExp("^("+((bSigned)?"[\\-\\+]?":"")+"(\\d*"+sFloatDelimiter+"?\\d+)|(\\d+"+sFloatDelimiter+"?\\d*))$");
if (!re.test(this.value)){
_err.add(this, _validation.FLOAT, null);
return false;
}
}
// AMOUNT
var sAmtDelimiter = this.getAttribute("amount");
if (sAmtDelimiter!=null && this.value){
// Assign default value to delimiter
sAmtDelimiter=(sAmtDelimiter==",")?",":"\\.";
var re = new RegExp("^"+((bSigned)?"[\\-\\+]?":"")+"\\d+("+sAmtDelimiter+"\\d{2})?$");
if(!re.test(this.value)){
_err.add(this, _validation.AMOUNT, null);
return false;
}
}
// INTEGER
if (this.getAttribute("integer")!=null && this.value){
var re=new RegExp("^"+((bSigned)?"[\\-\\+]?":"")+"\\d+$");
if (!re.test(this.value)){
_err.add(this, _validation.INTEGER, null);
return false;
}
}
// DATE
var sFormat=this.getAttribute("date");
if (sFormat!=null && this.value) {
// Set default date format
sFormat = _validation.setDefault(sFormat, "YYYY-MM-DD");
if (!_validation.isDate(this,sFormat)){
_err.add(this, _validation.DATE, "YYYY年MM月DD日");
return false;
}
}
//TimeCode
var sFormat=this.getAttribute("timecode");
if (sFormat!=null && this.value) {
// Set default timecode format
sFormat = _validation.setDefault(sFormat,"HH:MM:SS:FF");
if (!_validation.isTimeCode(this,sFormat)){
_err.add(this, _validation.TIMECODE, sFormat.toUpperCase());
return false;
}
}
// MASK
var sMask=this.getAttribute("mask");
if(sMask && this.value){
var sPattern=sMask.replace(
/(\$|\^|\*|\(|\)|\+|\.|\?|\\|\{|\}|\||\[|\])/g,"\\$1");
sPattern=sPattern.replace(/9/g ,"\\d");
sPattern=sPattern.replace(/x/ig,".");
sPattern=sPattern.replace(/z/ig,"\\d?");
sPattern=sPattern.replace(/a/ig,"[A-Za-z]");
var re=new RegExp("^"+sPattern+"$");
if(!re.test(this.value)){
_err.add(this, _validation.MASK, sMask);
return false;
}
}
// REGEXP
var sRegexp=this.getAttribute("regexp");
if(sRegexp && this.value){
var re=new RegExp(sRegexp);
if(!re.test(this.value)){
_err.add(this, _validation.MASK, sRegexp);
return false;
}
}
// AND
var sAnd=this.getAttribute("and");
if(sAnd && this.value){
var aAnd = sAnd.split(/,/);
var i, iFields=aAnd.length;
// Require each element in the list if this element is valued
for(i=0; i<iFields; i++){
var oNewElement=this.form.elements[aAnd[i]];
if(oNewElement && oNewElement.value.trim()==""){
_err.add(oNewElement, _validation.REQUIRED, null);
return false;
}
}
}
// OR
var sOr=this.getAttribute("or");
if(sOr && this.value==""){
var aOr=sOr.split(/,/);
var i, iFields=aOr.length;
var oNewElement, bAccum=false;
for(i=0; i<iFields; i++){
oNewElement=this.form.elements[aOr[i]];
if(oNewElement)
bAccum |= !!oNewElement.value.trim();
}
if(!bAccum){
_err.add(this, _validation.REQUIRED, null);
return false;
}
}
// NOSPACE
if (this.getAttribute("nospace")!=null)
this.value=this.value.replace(/\s/g,"");
// UPPERCASE
if (this.getAttribute("uppercase")!=null)
this.value=this.value.toUpperCase();
// LOWERCASE
if (this.getAttribute("lowercase")!=null)
this.value=this.value.toLowerCase();
// Perform onvalidate event handler
if(this.onvalidate && this.onvalidate()==false)
return false;
return true;
}
oElement.bProcessed=true;
}
}
}
}
// Limit use of script to valid environments
if("".replace && document.body && document.body.getAttribute){
/*********************************************************************
Method: String.trim
Purpose: Removing leading and trailing spaces
Inputs: none
Returns: string
*********************************************************************/
String.prototype.trim=function (){
return this.replace(/^\s+|\s+$/g,"");
}
/*********************************************************************
Method: String.reformat
Purpose: Translate the date format into the correct language
Inputs: sLang - language of error message to display
iType - type of failed validation
Returns: string
*********************************************************************/
String.prototype.reformat=function (sLang,iType){
var sString=this.valueOf();
if (iType==_validation.DATE && _validation.messages[sLang]) {
sString=sString.replace(/MM/,_validation.messages[sLang].MM);
sString=sString.replace(/DD/,_validation.messages[sLang].DD);
sString=sString.replace(/YYYY/,_validation.messages[sLang].YYYY);
}
return sString;
}
// Form setup
if(document.forms){
// Process forms and elements
this.setup();
var i, iForms=document.forms.length;
for(i=0; i<iForms; i++){
var oForm=document.forms[i];
if(oForm.getAttribute("mark")!=null)
oForm.markRequired();
}
}
}
}
_validation=new Validation;
_err=new Err;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -