/* 通用前端校验函数(请不断扩充),主要提供对于要提交的表单内容的检查,检查内容主要包括:必输项、
* 数据类型、数据长度、文件大小等
* 使用方法:
* 1. 需要校验的页面通过<script src="formcheck.js">包含本文件,具体路径各项目制订。
* 2. 校验规则的运用,举例说明:
<input id="Y_str" name="address" type="text" size="15" title="地址" maxlength="100">
以上例子是对一个地址输入框的校验,详细说明如下:
id - 放置了必输项和数据类型的校验规则,Y表示必输,N表示不必输;str表示是字符串类型,
更多的校验规则如下(按必输举例,不必输就是将Y换成N):
Y_str ---- 必输、字符串
Y_int ---- 必输、数字格式
Y_fla ---- 必输、浮点格式
Y_dat ---- 必输、日期格式(YYYY-MM-dd)
Y_mal ---- 必输、email格式(xxx@xxx.com)
Y_fil ---- 必输、文件格式(针对input type=file的输入框)
title - 放置了本输入框的友好名称,报警时使用。
maxlength - 放置了输入框的最大长度,本formcheck已经考虑了中文问题,所以比如:maxlength=50
的情况,则纯英文字符能最多输入50个,而中文最多输入25个。
* 3. 激活校验机制,有两种方法:
1)如果你的form是通过submit类型的按钮触发提交,你可以如此激活:
在form标签中加入: onsubmit="return checkSubmit(this)"
2)如果你的form是通过javascript代码触发提交,则你必须使用类似如下语句激活:
if checkSubmit(表单名) 表单名.submit();
*/
var hasclick=false;
var oPopup = window.createPopup();
function checkSubmit(form){
if (hasclick){
return false;
}else{
hasclick=true;
}
//首先判断,然后改名字
var p1=/(^/s*)|(/s*$)/g
var p2=/(^[ ]*)|([ ]*$)/g
var fso;
var file;
checkactivex=true;
var totalcheckfilesize=0;
var strtitle="";
var strrule="";
var str_warn="";
for(i=0;i<form.length;i++)
{
if((form[i].tagName.toUpperCase()=="INPUT" && form[i].type.toUpperCase()!="BUTTON")||(form[i].tagName.toUpperCase()=="TEXTAREA")||(form[i].tagName.toUpperCase()=="SELECT")){
form[i].value=form[i].value.replace(p1,"");
form[i].value=form[i].value.replace(p2,"");
}
str_warn="";
//检测判断条件,根据类型不同可以修改---如果是input类型,textArea类型
//使用方法:
//在需要校验的form中对象名,采用规范的对象命名
//例如:Y_int_mustint ----> 代表 此处校验:Y代表不能为空,int 代表必须是int类型
// N_fla_mustfla ----> 代表 此处校验:N代表可以为空,fla 如果不为空必须是 float类型
// N_dat_mustdate ----> 代表 此处校验:N代表可以为空,dat 如果不为空必须是 日期类型(格式采用统一格式:YYYY-MM-DD)
// Y_mal_sdfsdfsd ----> 代表 此处校验:Y代表不能为空,mal 代表必须是email类型
// Y_fil_sdfsdfsd ----> 代表 此处校验:Y代表不能为空,fil 代表必须是file“上传”类型
// Y_str_xxxxxxx ----> 代表 此处校验:Y代表不能为空,str 代表必须是String类型
// Y_net_sdfsdfsd ----> 代表 此处校验:Y代表不能为空,net 代表必须是输入的网络连接类型
if((((form[i].tagName.toUpperCase()=="INPUT") && (form[i].type.toUpperCase()=="TEXT" || form[i].type.toUpperCase()=="PASSWORD" || form[i].type.toUpperCase()=="FILE")) || (form[i].tagName.toUpperCase()=="TEXTAREA")||(form[i].tagName.toUpperCase()=="SELECT")) && (form[i].title!=""))
{
//alert(form[i].title+form[i].value.length+form[i].value.indexOf("Y"));
//取得判断类型和提示
strtitle="";
strrule="";
if(form[i].title.indexOf("Y_")==0 || form[i].title.indexOf("N_")==0){
strtitle= form[i].title.substring(6,form[i].title.length);
strrule= form[i].title.substring(2,5).toUpperCase();
}else{
strtitle= form[i].title;
}
if(form[i].name.indexOf("Y_")==0 || form[i].name.indexOf("N_")==0){
strrule= form[i].name.substring(2,5).toUpperCase();
}
if(form[i].id.indexOf("Y_")==0 || form[i].id.indexOf("N_")==0){
strrule= form[i].id.substring(2,5).toUpperCase();
}
// alert(strrule);
//取得结束
//首先判断所有元素有Y的不能为空
if(form[i].name.indexOf("Y_")==0 || form[i].title.indexOf("Y_")==0 || form[i].id.indexOf("Y_")==0)
{
if(form[i].value.length<1){
str_warn=strtitle+"不能为空!";
alert(str_warn);
form[i].focus();
return checkreturn(false);
}
}
//然后填写数据的判断类型匹配
if(form[i].value.length>0)
{
//判断3-5位的格式
if(strrule=="INT")//int数字校验
{
if(!isInt(form[i].value))
{
str_warn=strtitle+"格式不对,必须是整形数值!";
alert(str_warn);
form[i].focus();
return checkreturn(false);
}
}
if(strrule=="FLA")//float数字校验
{
if(!isFloat(form[i].value))
{
str_warn=strtitle+"浮点格式错误,正确的格式是整数位7位以下,小数点后2位以内!";
alert(str_warn);
form[i].focus();
return checkreturn(false);
}
}
if(strrule=="DAT")//date校验
{
if(!isDate(form[i].value))
{
str_warn=strtitle+"格式不对,必须是日期型数据!/n格式为:YYYY-MM-DD";
alert(str_warn);
form[i].focus();
return checkreturn(false);
}
}
if(strrule=="MAL")//mail校验
{
if(!isMailAddress(form[i].value))
{
str_warn=strtitle+"格式不对,必须是正确的邮件地址!/n格式为:sina@sina.com";
alert(str_warn);
form[i].focus();
return checkreturn(false);
}
}
if(strrule=="FIL")//文件校验,包括大小和路径的正确性
{
try{
//将全部文件大小和与form里的totalsize属性提供的大小比较
//if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 6 )){
if (form[i].filetype!=null){
if (checkfiletype(form[i].value,form[i].filetype)!=true){
str_warn=strtitle+"选择的文件类型不正确,请重新选择。";
alert(str_warn);
form[i].focus();
return checkreturn(false);
}
}
if (form.totalsize!=null && isInt(form.totalsize)){
returnsize = getfilesize(form[i].value);
if (returnsize<0)
{
form[i].focus();
return checkreturn(false);
}else{
totalcheckfilesize=totalcheckfilesize+returnsize;
}
if (totalcheckfilesize>form.totalsize){
alert("上传文件不允许超过"+form.totalsize/1000000+"M。");
return checkreturn(false);
}
}
//}else{
// alert(navigator.appName);
// alert(navigator.appVersion);
//}
}catch(e){
alert(e.message);
continue;
}
}
if(strrule=="NET")//文件校验,包括大小和路径的正确性
{
if (form[i].filetype!=null){
if (checkfiletype(form[i].value,form[i].filetype)!=true){
alert(strtitle+"选择的文件类型不正确,请重新选择。");
form[i].focus();
return checkreturn(false);
}
}
}
//判断最大录入长度限制
var maxLength =null;
maxLength = form[i].maxLength;
if (maxLength==null) maxLength = form[i].maxlength;
if (maxLength!=null && StrLen(form[i].value)>maxLength) {
str_warn=strtitle+"录入的字数不能超过"+maxLength/2+"个汉字("+maxLength+"个字符)";
alert(str_warn);
form[i].focus();
return checkreturn(false);
}
if (ilegalChar(form[i].value)) {
str_warn = strtitle+"包含有非法字符,例如 "+ilegalChars;
alert(str_warn);
form[i].focus();
return checkreturn(false);
}
}
}
}//end for
//改名字
for(i=0;i<form.length;i++){
//凡是这种类型的
if((((form[i].tagName.toUpperCase()=="INPUT") && (form[i].type.toUpperCase()=="TEXT" || form[i].type.toUpperCase()=="PASSWORD" || form[i].type.toUpperCase()=="FILE")) || (form[i].tagName.toUpperCase()=="TEXTAREA")||(form[i].tagName.toUpperCase()=="SELECT")) && (form[i].title!=""))
{
if (form[i].name.indexOf("Y_")==0 || form[i].name.indexOf("N_")==0)
//把Y_str_sdfsdf 转换成 sdfsdf
form[i].name=form[i].name.substring(6,form[i].name.length);
}
}
return checkreturn(true);
}
function checkreturn(checkvalue){
if (checkvalue==true){
document.xwaitting = 100;
//window.open("/js/waitting.htm","wait","toolbar=no,status=no,menubar=no,scrollbars=no,width=250,height=165,top=330,left=400");
//setTimeout("hasclick=false",10000);
var oPopupBody = oPopup.document.body;
var height=50;var width=240;
var x=screen.width/2-135;var y=screen.height/2-55;
//oPopupBody.style.background = "running.gif";
//oPopupBody.style.border = "solid blue 3px";
oPopupBody.innerHTML="<img src='/js/running.gif' border=0>";
oPopup.show(x, y, width, height);
//setTimeOut这句话是为了防止popUp出来的窗口不能自动消失
setTimeout("oPopup.hide()",1000);
hasclick=false;
return true;
}else{
hasclick=false;
return false;
}
}
//检查整形数值的函数
function isInt(inputVal) {
inputStr = inputVal.toString()
for (var i = 0; i < inputStr.length; i++) {
var oneChar = inputStr.charAt(i)
if (oneChar < "0" || oneChar > "9") {
return false;
}
}
return true;
}
//检查浮点型数值的函数
function isFloat(inputVal) {
inputStr = inputVal.toString()
for (var i = 0; i < inputStr.length; i++) {
var oneChar = inputStr.charAt(i)
if ((oneChar < "0" || oneChar > "9") && oneChar!=".") {
return false;
}
}
var numberArray = new Array();
var intLength = 0;
var decLength = 0;
numberArray = inputStr.split(".");
if (numberArray.length<=2) {
if (numberArray[0]!=null) {
intLength = numberArray[0].length;
if (numberArray[1]!=null) {
decLength = numberArray[1].length;
}
if (intLength>7) return false
else if ((numberArray[0] - 8359999)>0) return false;
if (decLength>2) return false;
} else return false;
} else return false;
return true;
}
//检查日期型数据
function isDate(sDate)
{
var iaMonthDays = [31,28,31,30,31,30,31,31,30,31,30,31]
var iaDate = new Array(3)
var year, month, day
if (arguments.length != 1) return false
iaDate = sDate.toString().split("-")
if (iaDate.length != 3) return false
if (iaDate[1].length !=2 || iaDate[2].length != 2) return false
year = parseFloat(iaDate[0])
month = parseFloat(iaDate[1])
day=parseFloat(iaDate[2])
if (!isInt(year) || !isInt(month) || !isInt(day)) return false;
if (year < 1900 || year > 2100) return false
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1]=29;
if (month < 1 || month > 12) return false
if (day < 1 || day > iaMonthDays[month - 1]) return false
return true
}
//校验邮件
function isMailAddress(strMail){
if(strMail.indexOf('@')<1){
return false;
}
if(strMail.indexOf('.')<1){
return false;
}
if (strMail.indexOf('@')>strMail.lastIndexOf('.')){
return false;
}
return true;
}
//检查指定名称的所有的RadioButton中是否有一个被选中
//参数是radiobutton的name
//如果有一个被选中返回true,如果没有一个被选中的返回false
function isRadioChecked(radioname) {
//判断是否存在指定名称的radiobutton
if(radioname==null){
return false;
}
//如果只有一个radiobutton,则直接判断是否被选中
if(radioname.checked){
return true;
}
//如果有一组的radiobutton,则循环判断
if (radioname.length>0) {
for(var i=0;i<radioname.length;i++){
if(radioname[i].checked){
return true;
}
}
}
return false;
}
//判断字符串的长度,可以处理汉字
/*
function StrLen(sString)
{
var sStr,iCount,i,strTemp ;
iCount = 0 ;
sStr = sString.split("");
for (i = 0 ; i < sStr.length ; i ++)
{
strTemp = escape(sStr[i]);
if (strTemp.indexOf("%u",0) == -1) // 表示是汉字
{
iCount = iCount + 1 ;
}
else
{
iCount = iCount + 2 ;
}
}
return iCount ;
}*/
function StrLen(sString) {
var j = 0;
var s = sString;
if (s=="") return j;
for (var i=0; i<s.length; i++)
{
if (s.substr(i,1).charCodeAt(0)>255) j = j + 2;
else j++
}
return j;
}
var ilegalChars = "' , /"";
function ilegalChar(value) {
if (value.indexOf("'")>-1) return true;
if (value.indexOf("/"")>-1) return true;
return false;
}
//检测文件大小
function getfilesize(formobject)
{
if (document.all)
{
if (checkactivex)
{
try{
fso = new ActiveXObject('Scripting.FileSystemObject');
}catch(ex){
alert("您的浏览器设置不支持ActiveX,请启用浏览器的ActiveX支持。");
checkactivex=false;
return 0;
}
}
if (checkactivex)
{
try{
file = fso.GetFile(formobject);
return file.Size;
}catch(e){
alert(e.message);
if(e.message=="文件未找到"){
return -1;
}else{
return 0;
}
}
}else{
return 0;
}
}else{
return 0;
}
}
//检测文件类型
function checkfiletype(formobject,filetypestr)
{
//filetypestr=filetypestr.toLowerCase();
if (formobject.indexOf(".")<0){
if (filetypestr==null){
return true;
}else if (filetypestr.substring(0,1)=="-"){
return true;
}else{
return false;
}
}else{
extname=formobject.substring(formobject.lastIndexOf(".")+1,formobject.length).toLowerCase();
if (filetypestr!=null){
if (filetypestr.substring(0,1)=="+"){
if(filetypestr.indexOf(extname)>1){
return true;
}else{
return false;
}
}
if (filetypestr.substring(0,1)=="-"){
if(filetypestr.indexOf(extname)>1){
return false;
}else{
return true;
}
}
}else{
return true;
}
}
}
function drawschedule(useday){
var daywidth=10;
var dayheight=20;
var maxwidth=100
var usecolor;
var printword;
var usewidth;
if (useday>0){
usecolor="#00FF00";
if (useday==1){
usecolor="#FFFF00";
}
printword="还剩"+useday+"天";
usewidth=useday*daywidth;
if (useday*daywidth>maxwidth){
usewidth=maxwidth;
}
}
if (useday==0){
usecolor="#FFFF00";
printword="没有剩余时间";
usewidth=maxwidth;
}
if (useday<0){
useday=0-useday;
usecolor="#FF0000";
printword="超时"+useday+"天";
usewidth=useday*daywidth;
if (useday*daywidth>maxwidth){
usewidth=maxwidth;
}
}
document.write("<div style=/"position:absolute;padding-left: 15px;padding-top: 3px;/" align=center width=100>"+printword+"</div>");
document.write("<table border=/"1/" cellpadding=/"0/" cellspacing=/"0/" style=/"border-collapse: collapse/" width=/""+usewidth+"/" bordercolorlight=/"#808080/" bordercolordark=/"#C0C0C0/" height=/""+dayheight+"/">");
document.write(" <tr> ");
document.write(" <td width=/""+usewidth+"/" height=/""+dayheight+"/" bgcolor=/""+usecolor+"/" valign=top></td> ");
document.write(" </tr> ");
document.write("</table> ");
}