JAvascriptデジタル検証スクリプト.
5046 ワード
以前のプロジェクトで使用した検証データのjavascriptスクリプトは、どこから探したのか、どの牛が書いたのか分からないが、どうせプロジェクトはずっと使っていて、効果は正負の数字、小数などを入力できるが、桁数などに制限はない.コードは次のとおりです.
最近のプロジェクトでは大量の数字が必要で、整数、小数に対して厳格な制限があります.このように、上のコードは要求に達することができません.ネット上でも適切なコードが見つかりません.仕方がありません.自分が少し知っている正規表現の知識に基づいて、上のスクリプトを書き直します.最終コードは以下の通りです.
実装される機能や使用方法の注釈には説明があります.
このスクリプトの作成には、2つの問題があり、解決に時間がかかります.
第一に、2つの正規表現の書き方が違います.検証の長さを動的に調整する必要があるため、検証スクリプトを動的につづる必要があります.
数字しか入力できない正規表現は、
第二:閉鎖パッケージの使用.
すべての整数または小数の長さが動的に処理されるため,以前は通常の方法で処理されていたように,検証の効果は常に最後に定義されていることが分かった.だから、閉パッケージを使って、問題は解決しました.
完全なdemoダウンロードアドレスを添付します.http://download.csdn.net/detail/tegwy/4466651
function setOnlyNum() {
$(this).css("ime-mode", "disabled");
$(this).attr("t_value", "");
$(this).attr("o_value", "");
$(this).bind("dragenter",function(){
return false;
});
$(this).keypress(function (){
if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value;
}).keyup(function (){
if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value;
}).blur(function (){
if(!this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?|\.\d*?)?$/))this.value=this.o_value;else{if(this.value.match(/^\.\d+$/))this.value=0+this.value;if(this.value.match(/^\.$/))this.value=0;this.o_value=this.value;}
//if(this.value.length == 0) this.value = "0";
});
//this.text.selected;
}
最近のプロジェクトでは大量の数字が必要で、整数、小数に対して厳格な制限があります.このように、上のコードは要求に達することができません.ネット上でも適切なコードが見つかりません.仕方がありません.自分が少し知っている正規表現の知識に基づいて、上のスクリプトを書き直します.最終コードは以下の通りです.
/**
* Number Validator
* @author Hui,Gang (mr.huig [at] gmail.com)
* @version Build 20120708
* @version Build 20120709 ie678
* @version Build 20120717
* @useage
* 1、import jQuery.js
* 2、import this file
* 3、eg
initNumberValidator("#a1,#a2,#a3", 0, 2) // 0 ,2
initNumberValidator("#a4", 3, 2) // 3 ,2
initNumberValidator("#a5", 2) // 2
initNumberValidator("#a6") // 4 ,10
* @param $d ID,jQuery ID 。 , #a1,#a2,#a3
* @param _dc_ , 0, , 4
* @param _ic_ , , 10
*
*/
function initNumberValidator($d, _dc_, _ic_){
$($d).each(function(){
$(this).focus=(function(o, _dc_, _ic_){
var ___decimal_count___ = _dc_ == 0 ? 0 : _dc_ || 4;
var ___int_count___ = _ic_ < 1 ? 1 : _ic_ || 10;
$(o).css("ime-mode", "disabled");
$(o).attr("t_value", "");
$(o).attr("o_value", "");
$(o).bind("dragenter",function(){
return false;
});
if(___decimal_count___ == 0) {//
$(o).keypress(function(){
if(!o.value.match(new RegExp("^[\\+\\-]?\\d{0,"+___int_count___+"}$"))){o.value=o.t_value;}else{o.t_value=o.value;}if(o.value.match(new RegExp("^[\\+\\-]?\\d{0,"+___int_count___+"}$"))){o.o_value=o.value;}
}).keyup(function(){
if(!o.value.match(new RegExp("^[\\+\\-]?\\d{0,"+___int_count___+"}$"))){o.value=o.t_value;}else{o.t_value=o.value;}
if(o.value.match(new RegExp("^[\\+\\-]?\\d{0,"+___int_count___+"}$"))){o.o_value=o.value;}
}).blur(function(){
if(!o.value.match(new RegExp("^[\\+\\-]?\\d{0,"+___int_count___+"}$"))){o.value=o.o_value;}else{if(o.value.match(/^\.\d+$/))o.value=0+o.value;if(o.value.match(/^\.$/))o.value=0;o.o_value=o.value;}
if(o.value.length==0)o.value=0;});
} else {//
$(o).keypress(function(){
if(!o.value.match(new RegExp("^(?:[\\+\\-]?\\d{0,"+___int_count___+"}(?:\\.\\d{0,"+___decimal_count___+"})?|\\.\\d{0,"+___decimal_count___+"}?)?$"))){o.value=o.t_value;}else{o.t_value=o.value;}
if(o.value.match(new RegExp("^(?:[\\+\\-]?\\d{0,"+___int_count___+"}(?:\\.\\d{0,"+___decimal_count___+"})?)?$"))){o.o_value=o.value;}
}).keyup(function(){
if(!o.value.match(new RegExp("^(?:[\\+\\-]?\\d{0,"+___int_count___+"}(?:\\.\\d{0,"+___decimal_count___+"})?|\\.\\d{0,"+___decimal_count___+"}?)?$"))){o.value=o.t_value;}else{o.t_value=o.value;}
if(o.value.match(new RegExp("^(?:[\\+\\-]?\\d{0,"+___int_count___+"}(?:\\.\\d{0,"+___decimal_count___+"})?)?$"))){o.o_value=o.value;}
}).blur(function(){
if(!o.value.match(new RegExp("^(?:[\\+\\-]?\\d{0,"+___int_count___+"}(?:\\.\\d{0,"+___decimal_count___+"})?|\\.\\d{0,"+___decimal_count___+"}?)?$"))){o.value=o.o_value;}else{if(o.value.match(/^\.\d+$/))o.value=0+o.value;if(o.value.match(/^\.$/))o.value=0;o.o_value=o.value;}
if(o.value.length==0)o.value=0;});
}
})(this, _dc_, _ic_);
})
}
実装される機能や使用方法の注釈には説明があります.
このスクリプトの作成には、2つの問題があり、解決に時間がかかります.
第一に、2つの正規表現の書き方が違います.検証の長さを動的に調整する必要があるため、検証スクリプトを動的につづる必要があります.
数字しか入力できない正規表現は、
/^\d+$/
RegExpクラスに移行するには、次の手順に従います.new RegExp("^\\d+")
は主に前後の/を削除し、すべての/文字を\で置き換えなければならない.第二:閉鎖パッケージの使用.
すべての整数または小数の長さが動的に処理されるため,以前は通常の方法で処理されていたように,検証の効果は常に最後に定義されていることが分かった.だから、閉パッケージを使って、問題は解決しました.
完全なdemoダウンロードアドレスを添付します.http://download.csdn.net/detail/tegwy/4466651