📄 checkform.js
字号:
/**
* 检查提交的form的每个表单元素是否符合填写要求
* @fm 需要检查的form元素。
* @return 如果form的所有表单元素都符合要求,将返回true,
* 否则将会报告不符合的原因,同时返回false。
* 示例:
* <form onsubmit="return checkForm(this)">
* <input type=submit>
* <input name=email title="请填写邮件地址~email!">
* </form>
* 说明:
* 在form表单元素的title属性中指明此表单元素期望的格式。
* 此格式说明如下
* 请填写邮件地址~email!
* 以最后一个"~"为界,前面的是提示信息,后面是格式信息。
* 格式信息请遵守以下规则:
* [number:][type][!]
* 说明:
* number: 一个数值后面跟一个":",表示此域的文本长度不可以超过指定的数值
* type可以是如下表达式
* email 邮件地址
* int 整数
* float 浮点数
* date 日期
* time 时间
* /.../[gi] 自定义正则式
* !表示此处文本不可以为空。
*/
function checkForm(fm)
{
for(var i=0;i<fm.length;i++)
{
var title=fm[i].title;
if(title=="")continue;//忽略未定义title的元素
var p=title.lastIndexOf("~");
if(p<0)continue;//忽略title中未定义检查格式的元素
var n=title.lastIndexOf("&");
var numLimit = 0;
var info=title.substring(0,p);
if(n > 0){
numLimit = title.substring(n+1,p);
numLimit = Math.pow(10,numLimit);
info=title.substring(0,n);
}
var format=title.substring(p+1,title.length);
var name=fm[i].name;
if(name=="")continue;//忽略没有名字的元素
var value=trim(fm[i].value);
//fm[i].value=value;//自动除去提交项的两端的空格
var notNull=false;
if(format.charAt(format.length-1)=="!")
{
notNull=true;
format=format.substring(0,format.length-1);
}
if(notNull)
{
if(value=="")
{
alert(info+"\n的内容不可以为空。");
fm[i].focus();
return false;
}
}
else
{
//内容可以为空时,
if(value=="")
continue;
}
//内容的长度判断
var colonP=format.indexOf(":");
if(colonP>0)
{
var lengthLimit=format.substring(0,colonP);
if(!isNaN(lengthLimit))
{
if(value.length>lengthLimit)
{
alert(info+"\n的长度("+value.length+")超过限制"+lengthLimit);
fm[i].focus();
return false;
}
format=format.substring(colonP+1,format.length);
}
}
if(format=="email")
{
//电子邮件格式
var found=value.match(/\w+@.+\..+/);
if(found==null)
{
alert(info+"\n的格式不正确:\n\""+value+"\"不是一个Email地址");
fm[i].focus();
return false;
}
}
else if(format=="int")
{
//整数
var intVal=parseInt(value);
if(isNaN(intVal)||intVal!=value)
{
alert(info+"\n的格式不正确:\n"+value+"不是一个整数。");
fm[i].focus();
return false;
}
if(intVal < 0){
alert(info+"\n的值\n"+value+"不能小于零。");
fm[i].focus();
return false;
}
}
else if(format=="float")
{
//浮点数
var floatVal=parseFloat(value);
if(isNaN(floatVal)||floatVal!=value)
{
alert(info+"\n的格式不正确:\n"+value+"不是一个浮点数。");
fm[i].focus();
return false;
}
if(floatVal < 0){
alert(info+"\n的值\n"+value+"不能小于零。");
fm[i].focus();
return false;
}
if(numLimit > 0 && floatVal >= numLimit){
alert(info+"\n的值\n"+value+"已经大于最大值["+numLimit+"]");
fm[i].focus();
return false;
}
}
else if(format=="date")
{
//日期
var found=value.match(/(\d{1,5})-(\d{1,2})-(\d{1,2})/);
if(found==null||found[0]!=value||found[2]>12||found[3]>31)
{
alert(info+"\n的格式不正确:\n\""+value+"\"不是一个日期\n提示:[2003-01-01]");
fm[i].focus();
return false;
}
var year=trim0(found[1]);
var month=trim0(found[2])-1;
var date=trim0(found[3]);
var d=new Date(year,month,date);
if(d.getFullYear()!=year||d.getMonth()!=month||d.getDate()!=date)
{
alert(info+"\n的内容不正确:\n\""+value+"\"不是一个正确的日期\n提示:[2003-01-01]");
fm[i].focus();
return false;
}
}
else if(format=="diffdate")
{
//日期
var found=value.match(/(\d{1,5})-(\d{1,2})-(\d{1,2})/);
if(found==null||found[0]!=value||found[2]>12||found[3]>31)
{
alert(info+"\n的格式不正确:\n\""+value+"\"不是一个日期\n提示:[2003-01-01]");
fm[i].focus();
return false;
}
var year=trim0(found[1]);
var month=trim0(found[2])-1;
var date=trim0(found[3]);
var d=new Date(year,month,date);
if(d.getFullYear()!=year||d.getMonth()!=month||d.getDate()!=date)
{
alert(info+"\n的内容不正确:\n\""+value+"\"不是一个正确的日期\n提示:[2003-01-01]");
fm[i].focus();
return false;
}
var currTime = new Date();
var currDate = currTime.getFullYear()+"-"+(currTime.getMonth()+1)+"-"+currTime.getDate();
var arr1=currDate.split("-");
var arr2=value.split("-");
var date1=new Date(arr1[0],parseInt(arr1[1].replace(/^0/,""))-1,arr1[2]);
var date2=new Date(arr2[0],parseInt(arr2[1].replace(/^0/,""))-1,arr2[2]);
if(arr1[1].length==1)
arr1[1]="0"+arr1[1];
if(arr1[2].length==1)
arr1[2]="0"+arr1[2];
if(arr2[1].length==1)
arr2[1]="0"+arr2[1];
if(arr2[2].length==1)
arr2[2]="0"+arr2[2];
var d1=arr1[0]+arr1[1]+arr1[2];
var d2=arr2[0]+arr2[1]+arr2[2];
if(parseInt(d1)>parseInt(d2))
{
alert(info+"\n\""+value+"\"不能晚于当前日期\n提示:["+currDate+"]");
fm[i].focus();
return false;
}
}
else if(format=="time")
{
//时间
var found=value.match(/(\d{2}):(\d{2})/);
if(found==null||found[0]!=value||found[1]>23||found[2]>59)
{
alert(info+"\n的格式不正确:\n\""+value+"\"不是一个时间\n提示:[05:38]");
fm[i].focus();
return false;
}
}
else if(format=="datetime")
{
var c_date = value.substring(0,10);
var c_time = value.substring(11,17);
//日期
var found=c_date.match(/(\d{1,5})-(\d{1,2})-(\d{1,2})/);
if(found==null||found[0]!=c_date||found[2]>12||found[3]>31)
{
alert(info+"\n的格式不正确:\n\""+value+"\"不是一个日期\n提示:[2000-01-01]");
fm[i].focus();
return false;
}
var year=trim0(found[1]);
var month=trim0(found[2])-1;
var date=trim0(found[3]);
var d=new Date(year,month,date);
if(d.getFullYear()!=year||d.getMonth()!=month||d.getDate()!=date)
{
alert(info+"\n的内容不正确:\n\""+value+"\"不是一个正确的日期\n提示:[2003-01-01 00:00:00]");
fm[i].focus();
return false;
}
//时间
found=c_time.match(/(\d{2}):(\d{2})/);
// found=c_time.match(/(\d{2}):(\d{2}):(\d{2})/);
if(found==null||found[0]!=c_time||found[1]>23||found[2]>59)
{
alert(info+"\n的格式不正确:\n\""+value+"\"不是一个时间\n提示:[2003-01-01 05:38]");
fm[i].focus();
return false;
}
}
else if(format!="")
{
//自定义
try
{
var found=value.match(eval(format));
if(found==null||found[0]!=value)
{
alert(info+"\n的格式不不符合要求:\""+value+"\"\n提示:["+format+"]");
fm[i].focus();
return false;
}
}
catch(e)
{
alert(e.name+":\n["+fm[i].name+"]不合法的正则式\""+format+"\"");
return false;
}
}
}
return true;
}
/**
* 除去字符串变量s两端的空格。
*/
function trim(s)
{
s=s.replace(/^ */,"");
s=s.replace(/ *$/,"");
return s;
}
/**
* 除去字符串表示的数值变量开头的所有的"0"。
* 比如
* trim0("01")将返回"1"
* trim0("1")将返回"1"
* trim0("10")将返回"10"
*/
function trim0(s)
{
s=s.replace(/^0*/,"");
return s;
}
function CheckAll(form){
for (var i=0;i<form.elements.length;i++){
var e = form.elements[i];
if (e.name != 'chkall')
e.checked = form.chkall.checked;
ifchecked=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -