function isDateNY(str)
{
var d = new Date();
var y = d.getFullYear();
var m = d.getMonth() + 1 ;
m = ( " 00 " + m).substr((m + "" ).length);
var a = str.match( /^ (d{ 4 })( -| / )(d{ 2 })$ / );
if (( ! a) || (parseInt(str.substr( 5 , 2 ), 10 ) > 12 ) || (parseInt(str.substr( 5 , 2 ), 10 ) < 1 ))
{
return false ;
}
return true ;
}
/* 描述: 验证是否是浮点数 */
function isDecimal(str) {
if ( !/^ d + .d * $ / .test(str)){
return false ;
}
return true ;
}
/* 描述: 验证是否为年份 */
function isYear(strYear){
var iYear = parseInt(strYear, 10 );
if (iYear < 1900 || iYear > 9000 )
return false ;
return true ;
}
/* 描述: 验证是否为月份 */
function isMonth(strMon){
var iMon = parseInt(strMon, 10 );
if (iMon < 0 || iMon > 12 )
return false ;
return true ;
}
/* 描述:是否是整数 */
function isNumber(str) {
for ( var i = 0 ;i < str.length;i ++ )
if (str.charCodeAt(i) < 0x0030 || str.charCodeAt(i) > 0x0039 ) return false ;
return true ;
}
/* 描述: 验证是否为日 */
function isDay(strDay){
var iDay = parseInt(strDay, 10 );
if (iDay < 0 || iDay > 31 )
return false ;
return true ;
}
/* 描述: 验证是否为normal类型 */
function _isnormal(str) {
if ( / [ ^ ws一 - 龥 - ()] / i.test(str)){
return false ;
}
return true ;
}
/* 描述: 验证是否为integer类型 */
function _isinteger(str) {
return /^ d + $ / .test(str)
}
/* 描述: 验证是否为decimal类型 */
function _isdecimal(str){
if ( / [ ^ d.] / i.test(str)){
return false ;
}
return true ;
}
/* 描述: 验证是否为extend类型 */
function _isextend(str) {
if ( / [ ^ ws - ( - )] / i.test(str)){
return false ;
}
return true ;
}
/* 描述: 验证是否为date类型 */
function _isdatetime(str){
if ( / [ ^ d - ] / i.test(str)) {
return false ;
}
return true ;
}
/* 描述: 验证是否为mail类型 */
function _ismail(str){
if ( / [ ^ w一 - 龥 - .@] / i.test(str)) {
return false ;
}
return true ;
}
/* 描述: 检查对象的输入长度 */
function checkLength(obj,length){
var tempValue = obj.value;
if (obj.value.Tlength() > length){
createInfoPop( " 输入长度不能大于 " + length,obj, 200 , 50 );
obj.value = obj.value.substr( 0 ,length);
if (tempValue == obj.value){
obj.value = "" ;
}
}
}
/* 描述: 输入字符的控制 */
function changeValue(obj,type){
switch (type){
// 包含数字、字母、汉字、下载线、中划线、()
case " normal " :
if ( ! _isnormal(obj.value)){
createInfoPop( " 只能包含数字、字母、汉字、下划线、中划线、空格、() " ,obj, 200 , 50 );
obj.value = obj.value.replace( / [ ^ ws一 - 龥 - ()] / g, "" );
}
break ;
// 整数
case " integer " :
if (obj.value == "" ) break ;
if ( ! _isinteger(obj.value)){
createInfoPop( " 只能包含数字 " ,obj, 200 , 50 );
obj.value = obj.value.replace( / D / g, "" );
}
break ;
// 浮点数
case " decimal " :
if ( ! _isdecimal(obj.value)){
createInfoPop( " 只能包含数字、小数点 " ,obj, 200 , 50 );
obj.value = obj.value.replace( / [ ^ d.] / , "" );
}
break ;
// 包含数字、字母、下载线、中划线、()
case " extend " :
if ( ! _isextend(obj.value)){
createInfoPop( " 只能包含数字、字母、下划线、中划线、() " ,obj, 200 , 50 );
obj.value = obj.value.replace( / [ ^ ws - ()] / g, "" );
}
break ;
// 包含数字、中划线
case " date " :
if ( ! _isdatetime(obj.value)){
createInfoPop( " 只能包含数字、中划线 " ,obj, 200 , 50 );
obj.value = obj.value.replace( / [ ^ d - ] / g, "" );
}
break ;
// 包含数字、汉字、下划线、中划线、·、@
case " email " :
if ( ! _ismail(obj.value)){
createInfoPop( " 只能包含数字、字母、汉字、下划线、中划线、.、@ " ,obj, 200 , 50 );
obj.value = obj.value.replace( / [ ^ w一 - 龥 - @.] / g, "" );
}
break ;
}
}
/* 描述: 失去焦点后,检查输入是否正确 */
function blurValue(obj,type,length,prec){
if ( ! prec) prec = 2 ; // 默认精度为2
if (obj.value == "" ) return false ;
switch (type){
case " decimal " :
if (obj.value.indexOf( " . " ) ==- 1 ){
if ( _isinteger(obj.value)){
if (obj.value.length > (length - prec)){
createInfoPop( " 整数部分长度不能大于 " + (length - prec) + " 位 " ,obj, 200 , 50 );
obj.value = "" ;
break ;
} else {
obj.value += " . " + repeatStr( " 0 " ,prec);
}
}
}
else {
if (obj.value.substr( 0 ,obj.value.indexOf( " . " )).length > (length - prec)){
createInfoPop( " 整数部分长度不能大于 " + (length - prec) + " 位 " ,obj, 200 , 50 );
obj.value = "" ;
break ;
}
if (obj.value.substr(obj.value.indexOf( " . " ) + 1 ).length < prec){
obj.value += repeatStr( " 0 " ,prec - obj.value.substr(obj.value.indexOf( " . " ) + 1 ).length);
}
}
if ( ! isDecimal(obj.value)){
createInfoPop(obj.value + " 不是浮点数 " ,obj, 200 , 50 );
obj.value = "" ;
break ;
}
checkLength(obj,length + 1 );
if (obj.value.substr(obj.value.indexOf( " . " )).Tlength() > (prec + 1 )){
createInfoPop( " 精度不能大于 " + prec,obj, 200 , 50 );
obj.value = obj.value.substr( 0 ,obj.value.indexOf( " . " ) + prec + 1 );
}
// 格式化数字的格式
formatDecimal(obj);
break ;
case " integer " :
if (isNumber(obj.value)){
if (obj.value.length > length){
createInfoPop( " 长度不能大于 " + length,obj, 200 , 50 );
obj.value = "" ;
}
} else {
createInfoPop(obj.value + " 不是整数 " ,obj, 200 , 50 );
obj.value = "" ;
}
break ;
case " date " :
if ( ! isDate(obj.value)){
createInfoPop(obj.value + " 不是日期格式<br> 格式:(####-##-##) " ,obj, 200 , 50 );
obj.value = "" ;
}
break ;
case " email " :
if ( ! isEmail(obj.value)){
createInfoPop( " email 格式不正确 " ,obj, 200 , 50 );
obj.value = "" ;
break ;
}
checkLength(obj,length);
break ;
case " cbo " :
// -----------------------------------------------------------------------------
// 说明:当类型为cbo时,length属性改为cboName
// -----------------------------------------------------------------------------
var cboObj;
var sValue;
cboObj = document.all.item(length);
sValue = "" ;
if (obj.value.Tlength() <= 0 ){
break ;
}
for ( var i = 0 ;i < cboObj.options.length;i ++ )
{
if (obj.value == cboObj.options[i].value)
{
sValue = obj.value + " - " + cboObj.options[i].text;
break ;
}
else if (obj.value == cboObj.options[i].text)
{
sValue = cboObj.options[i].value + " - " + obj.value;
break ;
}
else if (obj.value == (cboObj.options[i].value + " - " + cboObj.options[i].text))
{
sValue = cboObj.options[i].value + " - " + cboObj.options[i].text;
break ;
}
}
obj.value = sValue;
break ;
// -----------------------------------------------------------------------------
// 简短日期格式
case " date_NY " :
if (obj.value.substr( 0 ).length < 4 )
{
obj.value = "" ;
break ;
}
if (obj.value.substr( 0 ).length == 4 )
{
obj.value += " -01 " ;
break ;
}
if (obj.value.indexOf( " - " ) != " -1 " )
{
if (obj.value.substr( 0 ,obj.value.indexOf( " - " )).length < 4 )
{
obj.value = "" ;
break ;
}
if (obj.value.substr(obj.value.indexOf( " - " ) + 1 ).length < 2 )
{
if (obj.value.substr(obj.value.indexOf( " - " ) + 1 ) == "" )
{
obj.value = obj.value.substring( 0 ,obj.value.indexOf( " - " )) + " -01 " ;
break ;
}
if (eval(obj.value.substr(obj.value.indexOf( " - " ) + 1 )) < 1 )
{
obj.value = obj.value.substring( 0 ,obj.value.indexOf( " - " )) + " -01 " ;
}
else
{
obj.value = obj.value.substring( 0 ,obj.value.indexOf( " - " )) + " -0 " + obj.value.substr(obj.value.indexOf( " - " ) + 1 );
}
}
}
if (isDateNY(obj.value) == false )
{
createInfoPop( " 日期必须符合日期格式! " ,obj, 250 , 28 );
obj.value = "" ;
obj.focus();
}
break ;
case " nullmode " :
checkLength(obj,length);
break ;
}
}
/* 描述:格式化浮点数 */
function formatDecimal(obj){
var precStr = "" ;
var reg_exp;
reg_exp = new RegExp( " ^0+([1-9].+|0..+) " , " g " );
obj.value = obj.value.replace(reg_exp, " $1 " );
precStr = obj.value.substr(obj.value.indexOf('.'));
if (obj.value.length > 0 ){
var num = parseInt(obj.value, 10 );
if (num >= 1000 )
{
var number_string = Math.abs(num).toString();
var insert_position;
switch (number_string.length % 3 )
{
case 1 :insert_position = 1 ;
break ;
case 2 :insert_position = 2 ;
break ;
case 0 :insert_position = 3 ;
break ;
}
while (insert_position < number_string.length)
{
number_string = number_string.left(insert_position) + " , " + number_string.substring(insert_position);
insert_position += 4 ;
}
obj.value = number_string + precStr;
}
}
}
/* 描述: 恢复浮点数显示 */
function restoreFormat(obj){
var reg_exp = new RegExp( " , " , " g " );
obj.value = obj.value.replace(reg_exp, "" );
if (obj.value.indexOf( " . " ) !=- 1 ){
var j = 1 ;
for (i = obj.value.substr(obj.value.indexOf( " . " )).length - 1 ;i > 0 ;i -- ){
if (obj.value.substr(obj.value.indexOf( " . " ) + i, 1 ) == " 0 " ){
j += 1 ;
}
else {
break ;
}
}
i = obj.value.substr(obj.value.indexOf( " . " )).length;
obj.value = obj.value.substr( 0 ,obj.value.indexOf( " . " ) + i - j + 1 );
}
with (document.selection.createRange())
{
moveStart( " character " ,obj.value.length + 1 );
collapse();
select();
}
}
具体调用如下:
changeValue (obj,type)
描述:输入字符的控制
说明:
obj:需检查的客户端控件
type:输入类型
{normal: 包含数字、字母、汉字、下载线、中划线、()}
{integer:包含数字}
{decimal:包含数字、小数点}
{extend: 包含数字、字母、下载线、中划线、()}
{date: 包含数字、中划线}
{email: 包含数字、汉字、下划线、中划线、小数点、@}
样例:
1) 邮件格式检测
<input type=”button” name=”txtMail” onKeyup=”changeValue(this,’email’);” >
2) 日期格式检测
<input type=”button” name=”txtDate” onKeyup=”changeValue(this,’date’);” >
3) 浮点数检测
<input type=”button” name=”txtNumber” onKeyup=”changeValue(this,’decimal’);” >
blurValue(obj,type,length,prec)
描述:失去焦点后,检查输入是否正确
说明:
obj:需检查的客户端控件
type:输入类型
{decimal:验证输入值是否是浮点数及格式化浮点数、检查长度}
{date:验证输入值是否是日期格式及格式化日期但无需检查长度}
{email:验证输入值是否是email格式、检查长度}
{nullmode:仅检查输入值的长度}
length:最大输入长度
prec:小数位精度,默认2位
样例:
1) 浮点数
<input type=”button” name=”txtMail” onBlur=”blurValue(this,’decimal’,10,3);” >
2) 日期
<input type=”button” name=”txtDate” onBlur=”blurValue(this,’date’);” >
3) 邮件地址
<input type=”button” name=”txtMail” onBlur=”blurValue(this,’email’,20);” >
4) 仅检测长度
<input type=”button” name=”txt1” onBlur=”blurValue(this,’nullmode’,20);” >
注:changValue与blurValue配合使用
如果是浮点数检测还要与restoreFormat配合使用
restoreFormat(obj)
描述:恢复浮点数显示
说明:内部函数,将格式化过的数据赋给obj.value对象
样例:<input type=”button”name=”txt1” onFocus=”restoreFormat(this);”>
另外在Asp.Net中调用方法如下:
txtCJG.Attributes("onblur") = "javascript:blurValue(this,'cbo','cboCJG');"
txtCBSYR.Attributes("onkeyup") = "javascript:changeValue(this,'normal');"
txtCBSYR.Attributes("onblur") = "javascript:blurValue(this,'nullmode',80);"