/**
文件名称:CommonUtil.js
作者 : Yuce
编制时间: 2010-03-24
文件内容:一些常用的js公用类。工具类
包括方法:
g_FormFieldIsNull 判断DBForm的指定字段是否为空
g_GetObjXY 获取页面中某个元素的绝对座标
g_IsDigit 校验是否全由数字组成
g_IsFloat(s,pDecimal) 校验是否是合法的小数
g_IsEmail 判断合法的email地址
g_IsTeleNumber 校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”
g_IsPostalCode 校验邮政编码 6位数字
g_IsMobileNumber 校验手机号码:必须以数字开头,除数字外,可含有“-”
g_IsDate 判断日期格式是否合法,符合yyyy-mm-dd
g_IsDateTime 校验日期时间是否合法yyyy-mm-dd H24:MI:SS这种格式的日期+时间
g_getStrLen 获取字符串的长度,如果字符串中包括中文等双字节代码,则其长度算为2。
g_getSubStrInByte 获取子字符串,参数长度为字节长度。
g_StringTrim 字符串trim方法,取消到前后的空格
g_GetSysDateTime 请求数据库获取数据库的日期和时间
g_GetSysDate 请求数据库获取数据库日期
g_GetSysTime 请求数据库获取数据库时间
g_CheckInputNum 控制只能输入数字
g_IDCardNumber 判断是否是身份证号码
g_FormatDate(aDate,format) 格式化日期时间方法PARAMETER: aDate:js中的aDate对象,format-格式字符串.如:yyyy-MM-dd hh:mm:ss
g_BeforePasteNum() 粘贴时控制只能贴入数字和回车 需要绑定onbeforePaste事件
g_BeforePasteEnglish() 粘贴时控制只能贴入数字和字母,需要绑定onbeforePaste事件
g_CompareDate 判断日期大小
g_MonthsBetween 计算月份差(忽略天,先将时间trunc到月,然后做比较)
**/
/**
判断DBForm的指定字段是否为空,如果为空返回true,并alert警告。否则返回false
pFormRowSet -- DBFormRowSet对象
pFieldNames -- 校验的字段名称串,每个字符以"," 分割
*/
function g_FormFieldIsNull(pFormRowSet,pFieldNames)
{
var flag = false;
if(pFormRowSet == null || pFieldNames==null || pFieldNames=="")
{
alert(g_I18NMessage("appframe_core","commutil_param_null"));
return flag;
}
var fieldArray = pFieldNames.split(",");
if(fieldArray!=null && fieldArray.length>0){
for (var i=0;i<fieldArray.length ;i++ )
{
var fieldValue = pFormRowSet.getValue(fieldArray[i]);
if(fieldValue!=null && g_StringTrim(fieldValue)==""){
var fieldText = pFormRowSet.getTitle(fieldArray[i]);
alert(fieldText+g_I18NMessage("appframe_core","commutil_cannot_null"));
flag = true;
break;
}
}
}
return flag;
}
/*********************************************************************************
* FUNCTION: g_GetObjXY 获取页面中某个元素的绝对座标
* PARAMETER: obj,dhtml 对象
* RETURNS: array,array['x']=xpos,array['y']=ypos
*********************************************************************************/
function g_GetObjXY(Obj)
{
for(var sumTop=0,sumLeft=0;Obj!=document.body;sumTop+=Obj.offsetTop,sumLeft+=Obj.offsetLeft,Obj=Obj.offsetParent);
return {left:sumLeft,top:sumTop};
}
/*********************************************************************************
* FUNCTION: g_IsEmail 判断合法的email地址
* PARAMETER: String (Email Address)
* RETURNS: TRUE if the String is a valid Email address
* FALSE if the passed string is not a valid Email Address
* EMAIL FORMAT: AnyName@EmailServer e.g; webmaster@hotmail.com
* @ sign can appear only once in the email address.
*********************************************************************************/
function g_IsEmail (theStr) {
if(theStr==null || theStr=='')return true;
var atIndex = theStr.indexOf('@');
var dotIndex = theStr.indexOf('.', atIndex);
var flag = true;
theSub = theStr.substring(0, dotIndex+1)
if ((atIndex < 1)||(atIndex != theStr.lastIndexOf('@'))||(dotIndex < atIndex + 2)||(theStr.length <= theSub.length))
{ return(false); }
else { return(true); }
}
/*********************************************************************************
* FUNCTION: g_IsDigit 校验是否全由数字组成
* PARAMETER: 字符串s
* RETURNS: true/false
*********************************************************************************/
function g_IsDigit(s)
{
if(s==null) return false;
if(s=='')return true;
s=''+s;
if(s.substring(0,1)=='-' && s.length>1)s=s.substring(1,s.length);
var patrn=/^[0-9]*$/;
if (!patrn.exec(s)) return false;
return true
}
/*********************************************************************************
* FUNCTION: g_IsFloat 校验是否是小数
* PARAMETER: 字符串s.pDecimal精度(保留多少位小数 值为0或者-1时不限制精度)
* RETURNS: true/false
*********************************************************************************/
function g_IsFloat(s,pDecimal)
{
if(s==null) return false;
s=''+s;
if(s=='')return true;
if(s.substring(0,1)=='-' && s.length>1)s=s.substring(1,s.length);
var dec = -1;
if(parseInt(pDecimal)!=NaN)
dec = pDecimal;
var reg = "^[0-9]+(\\.[0-9]{1,"+dec+"})?$";
if(dec==0 || dec==-1)
{
reg = "^[0-9]+(\\.[0-9]{1,10000})?$";
}
var re = new RegExp(reg,"g");
if(!s.match(re)) return false;
else return true;
}
/*********************************************************************************
* FUNCTION: g_IsTeleNumber 校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”
* PARAMETER: 字符串s
* RETURNS: true/false
*********************************************************************************/
function g_IsTeleNumber_bak(s)
{
if(s==null || s=='')return true;
if(s.length>20)return false;
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
function g_IsTeleNumber(s)
{
if(s==null || s=='')return true;
if(s.length>20 || s.length<4)return false;
var re = new RegExp(/^[\d'('')'' '\*\-]*$/);
if(re.exec(s))return true;
else return false;
}
/*********************************************************************************
* FUNCTION: g_IsMobileNumber 校验手机号码:必须以数字开头,除数字外,可含有“-”
* PARAMETER: 字符串s
* RETURNS: true/false
*********************************************************************************/
function g_IsMobileNumber_bak(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
//新的手机号码验证,以1打头,11位数字
function g_IsMobileNumber(s)
{
if(s==null || s=='')return true;
if( s.length!=11 || ( s.substring(0,2)!='13' && s.substring(0,2)!='15'))return false;
if(!g_IsDigit(s))return false;
return true
}
/*********************************************************************************
* FUNCTION: g_IsPostalCode 校验邮政编码 6位数字
* PARAMETER: 字符串s
* RETURNS: true/false
*********************************************************************************/
//
function g_IsPostalCode(s)
{
if(s==null || s=='')return true;
var patrn=/^[0-9]{6}$/;
if (!patrn.exec(s)) return false
return true
}
/*********************************************************************************
* FUNCTION: g_IsDate 校验日期是否合法yyyy-mm-dd这种格式的日期
* PARAMETER: 字符串s
* RETURNS: true/false
*********************************************************************************/
function g_IsDate(str)
{
if(str=='')return true;
if(DATE_SEPARATOR==null) DATE_SEPARATOR ="-";
var regExpStr = "^\\d{4}" + DATE_SEPARATOR + "\\d{1,2}" + DATE_SEPARATOR + "\\d{1,2}$";
var patrn = new RegExp(regExpStr);
if(!patrn.exec(str)) return false;
var dateArray = str.split(DATE_SEPARATOR);
var d= new Date(dateArray[0],dateArray[1]-1,dateArray[2]);
var issame =(d && (d.getFullYear()==dateArray[0])&& (d.getMonth()+1==dateArray[1]) &&(d.getDate()==dateArray[2]));
if (!issame)
{
return false;
}
return true;
}
/*********************************************************************************
* FUNCTION: g_IsDateTime 校验日期是否合法yyyy-mm-dd H24:MI:SS这种格式的日期+时间
* PARAMETER: 字符串s
* RETURNS: true/false
*********************************************************************************/
function g_IsDateTime(str)
{
if(str=='')return true;
if(DATE_SEPARATOR==null) DATE_SEPARATOR ="-";
var regExpStr = "^\\d{4}" + DATE_SEPARATOR + "\\d{1,2}" + DATE_SEPARATOR + "\\d{1,2}\\s\\d{2}:\\d{1,2}:\\d{1,2}$";
var patrn = new RegExp(regExpStr);
if(!patrn.exec(str)) return false;
var dateTimeArray = str.split(" ");
if(dateTimeArray==null || dateTimeArray.length!=2) return false;
var dateArray = dateTimeArray[0].split(DATE_SEPARATOR);
var timeArray = dateTimeArray[1].split(":");
var d= new Date(dateArray[0],dateArray[1]-1,dateArray[2],timeArray[0],timeArray[1],timeArray[2]);
var issame =(d && (d.getFullYear()==dateArray[0])&& (d.getMonth()+1==dateArray[1]) &&(d.getDate()==dateArray[2]) && (d.getHours() == timeArray[0]) && (d.getMinutes()== timeArray[1]) && (d.getSeconds()== timeArray[2]) );
if (!issame)
{
return false;
}
return true;
}
/*********************************************************************************
* FUNCTION: 获取字符串的长度,如果字符串中包括中文等双字节代码,则其长度算为2。
* PARAMETER: 字符串s
* RETURNS: int
*********************************************************************************/
function g_GetStrLen(str){
str = str.toString(10);
return str.replace(/[^\x00-\xff]/g,"aa").length;
}
/*********************************************************************************
* FUNCTION: 获取子字符串,参数长度为字节长度
* PARAMETER: str字符串,length获取长度,已字节为单位,如双字节,按照2处理,子串取ground
* RETURNS: int
*********************************************************************************/
function g_getSubStrInByte(str,lenth){
str = str.toString(10);
var tmpstr= str.replace(/[^\x00-\xff]/g,"\x0b\x0c");
tmpstr =tmpstr.substring(0,lenth);
tmpstr = tmpstr.replace(/\x0b/g,'');
return str.substring(0,tmpstr.length);
}
/*********************************************************************************
* FUNCTION: 字符串trim方法,取消到前后的空格
* PARAMETER: 字符串s
* RETURNS: string字符串
*********************************************************************************/
function g_StringTrim(str){
str = str.toString(10);
return str.replace(/(^\s*)|(\s*$)/g, "");
}
/*********************************************************************************
* FUNCTION: 请求数据库获取数据库的日期和时间
* PARAMETER: null
* RETURNS: string字符串
*********************************************************************************/
function g_GetSysDateTime()
{
var _gNode = null;
var xml= new ActiveXObject("Msxml.DOMDocument");
xml.async = false;
var url= _gModuleName+ "/business/com.ai.appframe2.web.DefaultAction?action=getSysDateTime";
var b = xml.load(url);
if(!b){
alert(g_I18NMessage("appframe_core","commutil_gettime_err"));
return null;
}
var xmlNode = xml.documentElement;
var ud = createUserDataClass(xmlNode,true);
return ud.getValueByName("DateTime");
}
/*********************************************************************************
* FUNCTION: 请求数据库获取数据库日期
* PARAMETER: null
* RETURNS: string字符串
*********************************************************************************/
function g_GetSysDate()
{
var dateTime = g_GetSysDateTime();
var date = null;
if(dateTime!=null && dateTime.indexOf(' ')!=null)
{
date = dateTime.substring(0,dateTime.indexOf(' '));
}
return date;
}
/*********************************************************************************
* FUNCTION: 请求数据库获取数据库的时间
* PARAMETER: null
* RETURNS: string字符串
*********************************************************************************/
function g_GetSysTime()
{
var dateTime = g_GetSysDateTime();
var time = null;
if(dateTime!=null && dateTime.indexOf(' ')!=null)
{
time = dateTime.substring(dateTime.indexOf(' ')+1,dateTime.length);
}
return time;
}
/*********************************************************************************
* FUNCTION: 控制只能输入数字和回车
* PARAMETER: null
* RETURNS: null
*********************************************************************************/
function g_CheckInputNum(obj){
var keyCode = event.keyCode;
if(keyCode==8)return;
if(keyCode==46)return;
if(keyCode==35)return;
if(keyCode==36)return;
if(keyCode==37)return;
if(keyCode==39)return;
if(event.keyCode==13)return;
//支持ctrl + a、v、x、c
if(event.ctrlKey && (keyCode==65 || keyCode==67
||keyCode==86 || keyCode==88)){
if(keyCode==86){
var str = window.clipboardData.getData('text');
if(str!=null){
str = str.replace(/[^\d\n]/g,'');
str = str.replace(/[\n]+/g,'\n');
window.clipboardData.setData('Text',str);
}
}
return;
}
if(48>event.keyCode || (event.keyCode > 57 && event.keyCode < 96)
|| event.keyCode >105 ){
event.returnValue=false;
}
//对微软输入法的特殊限制
if(keyCode ==229 && obj !=null){
obj.disabled = true;
obj.disabled = false;
obj.focus();
obj.value = obj.value.replace(/[^\d]/g,'');
}
}
/*********************************************************************************
* FUNCTION: 控制只能输入数字或字母等
* 允许的字母如下:"0123456789-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
* PARAMETER: null
* RETURNS: null
*********************************************************************************/
function g_CheckInputEnglish(obj){
var keyCode = event.keyCode;
if(keyCode==8)return;
if(keyCode==46)return;
if(keyCode==35)return;
if(keyCode==36)return;
if(keyCode==37)return;
if(keyCode==39)return;
if(event.keyCode==13)return;
//支持ctrl + a、v、x、c
if(event.ctrlKey && (keyCode==65 || keyCode==67
||keyCode==86 || keyCode==88)){
//
if(keyCode==86){
var str = window.clipboardData.getData('text');
if(str!=null){
str = str.replace(/[\W]/g,'');
window.clipboardData.setData('Text',str);
}
}
return;
}
var checkOK = "0123456789-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
var str = String.fromCharCode(keyCode);
if(checkOK.indexOf(str)<0 ){
event.returnValue=false;
}
//对微软输入法的特殊限制
if(keyCode ==229 && obj !=null){
obj.disabled = true;
obj.disabled = false;
obj.focus();
obj.value = obj.value.replace(/[\W]/g,'')
}
}
//判断是否是身份证号码
function g_IDCardNumber(value){
if(value=='' || value==null)return true;
var length = value.length;
if(length ==15){
if(!g_IsDigit(value) || value.substring(0,1)=='-'){
return false;
}
return true;
}else if(length ==18){
//前17位必须是数字
for (i= 0; i < 17; i++){
code = value.charCodeAt(i);
if(code<48 || code>57)return false;
}
//18位身份证号码的最后一位可以是数字或英文字母
code = value.charCodeAt(17);
if(code>=48 && code<=57 || code>=65 && code<=90 || code>=97 && code<=122){
return true;
}
}
//位数不为15或者18则返回
return false;
}
//判断日期大小,输入两个日期字符串,返回两个日期的大小
// 0一样大 ,1 第一日期大 ,-1 第二个日期大,-2错误
function g_CompareDate(date_str1 ,date_str2){
if(date_str1 ==null)date_str1='';
if(date_str2==null ) date_str2='';
if(date_str1 ==date_str2)return 0;
if( !g_IsDateTime(date_str1) && !g_IsDate(date_str1)
|| !g_IsDateTime(date_str2) && !g_IsDate(date_str2) ){
alert(g_I18NMessage("appframe_core","commutil_comparedate_err"));
return -2;
}
if(date_str1 =='' && date_str2 !='') return -1;
if(date_str2 =='' && date_str1 !='')return 1;
var hour =0;
var min =0;
var sec =0;
var dateTimeArray = date_str1.split(" ");
var dateArray = dateTimeArray[0].split(DATE_SEPARATOR);
if(dateTimeArray.length>1){
var timeArray = dateTimeArray[1].split(":");
hour = timeArray[0];
min = timeArray[1]
sec = timeArray[2]
}
var d1= new Date(dateArray[0],dateArray[1]-1,dateArray[2],hour ,min ,sec);
hour =0;
min =0;
sec =0;
dateTimeArray = date_str2.split(" ");
dateArray = dateTimeArray[0].split(DATE_SEPARATOR);
if(dateTimeArray.length>1){
var timeArray = dateTimeArray[1].split(":");
hour = timeArray[0];
min = timeArray[1]
sec = timeArray[2]
}
var d2= new Date(dateArray[0],dateArray[1]-1,dateArray[2],hour ,min ,sec);
if (d1.getTime()==d2.getTime()) return 0;
if(d1.getTime()>d2.getTime())return 1;
else return -1;
}
/**
判断月份差,输入两个日期字符串,返回两个月份差
如果输入的是非法值,抛出异常
(year1-year2)*12+(month1-month2)
add by yangbb
*/
function g_MonthsBetween(date_str1 ,date_str2){
if(date_str1 ==null){
date_str1='';
}
if(date_str2==null ){
date_str2='';
}
if(date_str1 ==date_str2){
return 0;
}
if( !g_IsDateTime(date_str1) && !g_IsDate(date_str1)|| !g_IsDateTime(date_str2) && !g_IsDate(date_str2) ){
alert(g_I18NMessage("appframe_core","commutil_comparedate_err"));
//抛出异常
throw new Error(g_I18NMessage("appframe_core","commutil_not_date"));
}
//解析时间字符串
var year1 =0;
var month1 =0;
var day1 =0;
var dateTimeArray = date_str1.split(" ");
var dateArray = dateTimeArray[0].split(DATE_SEPARATOR);
year1=dateArray[0];
month1=dateArray[1];
day1=dateArray[2];
var year2 =0;
var month2 =0;
var day2 =0;
dateTimeArray = date_str2.split(" ");
dateArray = dateTimeArray[0].split(DATE_SEPARATOR);
year2=dateArray[0];
month2=dateArray[1];
day2=dateArray[2];
return (year1-year2)*12+(month1-month2);
}
//校验密码是否合法 ,8位非空字母 ,包含数字和字母
function checkPSWFormatValid(psw){
if(psw==null || psw.length<8){
alert(g_I18NMessage("appframe_core","commutil_pwd_len"));
return false;
}
if(psw.indexOf(' ')>-1 || psw.indexOf('&')>-1){
alert(g_I18NMessage("appframe_core","commutil_pwd_black"));
return false;
}
var bNumber = false;//判断密码是否含有数字
var bAlphe = false; //判断是否含有英文字母
for (i = 0; i < psw.length; i++){
//如果含有英文字母和数字,则返回true
if(bNumber && bAlphe ){
return true;
}
code = psw.charCodeAt(i);
//判断是否包含数字
if(!bNumber){
if(code>=48 && code<=57){
bNumber = true;
continue;
}
}
//判断是否包含英文字母
if(!bAlphe){
if(code>=65 && code<=90 || code>=97 && code<=122){
bAlphe = true;
}
}
}
if(bNumber && bAlphe ){
return true;
}
alert(g_I18NMessage("appframe_core","commutil_pwd_all"));
return false;
}
/*********************************************************************************
* FUNCTION: 格式化日期时间方法
* PARAMETER: aDate:js中的aDate对象,format-格式字符串.如:yyyy-MM-dd hh:mm:ss
* RETURNS: 格式后的日期时间字符串
* AUTHOR:ZLH
*********************************************************************************/
function g_FormatDate(aDate,format)
{
var o = {
"M+" : aDate.getMonth()+1, //month
"d+" : aDate.getDate(), //day
"h+" : aDate.getHours(), //hour
"m+" : aDate.getMinutes(), //minute
"s+" : aDate.getSeconds(), //second
"q+" : Math.floor((aDate.getMonth()+3)/3), //quarter
"S" : aDate.getMilliseconds() //millisecond
}
if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
(aDate.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length==1 ? o[k] :
("00"+ o[k]).substr((""+ o[k]).length));
return format;
}
/*********************************************************************************
* FUNCTION: 粘贴时控制只能贴入数字和回车
* PARAMETER: null
* RETURNS: null
*********************************************************************************/
function g_BeforePasteNum(){
var str = window.clipboardData.getData('text');
if(str!=null){
str = str.replace(/[^\d\n]/g,'');
str = str.replace(/[\n]+/g,'\n');
str = str.replace(/(^\s*)|(\s*$)/g, "");
window.clipboardData.setData('Text',str);
}
}
/*********************************************************************************
* FUNCTION: 粘贴时控制只能贴入数字和字母
* PARAMETER: null
* RETURNS: null
*********************************************************************************/
function g_BeforePasteEnglish(){
var str = window.clipboardData.getData('text');
if(str!=null){
str = str.replace(/[\W]/g,'');
window.clipboardData.setData('Text',str);
}
}
表单验证公共js
最新推荐文章于 2022-08-03 19:20:27 发布