//$Id: checkForm.js,v 1.1 2004/05/29 06:46:34 shenbing Exp $
//version 1.2 添加了对form的查询条件进行自动拼装的功能getQueryString();
// 对select radio checkbox等元素作了新的定义
// 相对v1.2b版纠正了几个bug
/**
* 检查提交的form的每个表单元素是否符合填写要求
* @fm 需要检查的form元素。
* @return 如果form的所有表单元素都符合要求,将返回true,
* 否则将会报告不符合的原因,同时返回false。
* 示例:
*
* 说明:
* 在form表单元素的title属性中指明此表单元素期望的格式。
* 此格式说明如下
* 请填写邮件地址~email!
* 以最后一个"~"为界,前面的是提示信息,后面是格式信息。
* 格式信息请遵守以下规则:
* [number[f]:][type][!]
* 说明:
* number[f]: 一个数值后面跟一个":",表示此域的文本长度不可以超过指定的数值,如果在数值后面有个f表示固定长度必须为多少位
* type可以是如下表达式
* email 邮件地址
* int 整数
* float 浮点数
* date 日期
* time 时间
* hasChinese 含有中文
* allChinese 全部是中文
* noChinese 没有中文
* /.../[gi] 自定义正则式
*********************<1 必须小于1--特指百分数
*********************>0 必须>0
*********************>int0 必须>0的整数
* !表示此处文本不可以为空。
* 对于 格式串为
* "请选择一个选项~!"表示此radio组必须选择一个选项
* "请选择一个选项~"表示此radio组的选项可以不选。
* 对于或者格式串的意义为
* 说明信息~min:0max:3
* 对于非multiple类型
* "请选择一个选项~!"表示此select不可以选择第一个选项
* "请选择一个选项~"表示此select可以选择第一个选项
*/
function checkForm(fm)
{
for(var i=0;i的内容不可以为空。");
fm[i].focus();
return false;
}
else{
var c1=value.indexOf("'");
var c2=value.indexOf("\"");
var c3=value.indexOf("(");
var c4=value.indexOf(")");
if(c1>=0){
alert("<"+info+">的内容不可以包含半角单引号。");
fm[i].focus();
return false;
}
if(c2>=0){
alert("<"+info+">的内容不可以包含半角双引号。");
fm[i].focus();
return false;
}
if(c3>=0){
alert("<"+info+">的内容不可以包含半角左括号。");
fm[i].focus();
return false;
}
if(c4>=0){
alert("<"+info+">的内容不可以包含半角右括号。");
fm[i].focus();
return false;
}
}
}
else
{
//内容可以为空时,
if(value=="")
continue;
}
//内容的长度判断
var colonP=format.indexOf(":");
var colonP2=format.indexOf("}");
if(colonP2<=0){
colonP2 = 0;
}
if(colonP>0)
{
if(format.charAt(colonP-1)=='f')
{
var lengthLimit=format.substring(colonP2,colonP-1);
if(!isNaN(lengthLimit))
{
if(value.length!=lengthLimit)
{
alert(info+"\n"+name+"的长度为"+value.length+"位,必须为"+lengthLimit+"位");
fm[i].focus();
return false;
}
}
}
else
{
var lengthLimit=format.substring(colonP2,colonP);
if(!isNaN(lengthLimit))
{
if(value.length>lengthLimit)
{
alert(info+"\n"+name+"的长度("+value.length+")超过限制"+lengthLimit);
fm[i].focus();
return false;
}
}
}
format=format.substring(colonP+1,format.length);
}
//空格和每个单词长度的要求
if(colonP2>0)
{
var lengthLimit2=format.substring(0,colonP2);
if(value.indexOf(" ")<1 || value.indexOf(" ")>=value.length)
{
alert("<"+info+">的内容中单词之间必须包含半角空格。");
fm[i].focus();
return false;
}
if(!isNaN(lengthLimit2))
{
var tmpV = value;
while(tmpV.indexOf(" ")>0){
var tmpAt = tmpV.indexOf(" ");
var fieldTmpV = tmpV.substring(0, tmpAt);
if(fieldTmpV.length < lengthLimit2){
alert("<"+info+">的内容中单词的长度小于'"+lengthLimit2+"'个字符!");
fm[i].focus();
return false;
}
tmpV = tmpV.substring(tmpAt+1, tmpV.length);
}
}
format=format.substring(colonP2+1,format.length);
}
if(format=="email")
{
//电子邮件格式
var found=value.match(/\w+@.+\..+/);
if(found==null)
{
alert("<"+info+">的格式不正确:\n\""+value+"\"不是一个Email地址");
fm[i].focus();
return false;
}
}
else if(format=="domain"){
//电子邮件格式
var found=value.match(/\w+.+\..+/);
if(found==null)
{
alert("<"+info+">的格式不正确:\n\""+value+"\"不是一个域名地址");
fm[i].focus();
return false;
}
}
else if(format=="int")
{
//整数
var intVal=parseInt(trim0(value));
if(isNaN(intVal)||intVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个整数。");
fm[i].focus();
return false;
}
}
else if(format==">int0")
{
//大于0整数
var intVal=parseInt(value);
if(isNaN(intVal)||intVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个整数。");
fm[i].focus();
return false;
}else if(intVal<=0){
alert(info+"\n"+value+"不是一个大于0的整数。");
fm[i].focus();
return false;
}
}
else if(format=="float")
{
//浮点数
var floatVal=parseFloat(value);
if(isNaN(floatVal)||floatVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个浮点数。");
fm[i].focus();
return false;
}
}
else if(format=="<1")
{
//浮点数
var floatVal=parseFloat(value);
if(isNaN(floatVal)||floatVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个有效的数。");
fm[i].focus();
return false;
}else if(floatVal>100 || floatVal<=0){
alert(info+"\n"+value+"不是一个在0到100之间的数。");
fm[i].focus();
return false;
}
}
else if(format==">0")
{
//浮点数
var floatVal=parseFloat(value);
if(isNaN(floatVal)||floatVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个有效的数。");
fm[i].focus();
return false;
}else if(floatVal<=0){
alert(info+"\n"+value+"不是一个大于0的数。");
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"+name+"的格式不正确:\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"+name+"的内容不正确:\n\""+value+"\"不是一个正确的日期\n提示:[2000-01-01]");
fm[i].focus();
return false;
}
}
else if(format=="time")
{
//时间
var found=value.match(/(\d{2}):(\d{2}):(\d{2})/);
if(found==null||found[0]!=value||found[1]>23||found[2]>59||found[3]>59)
{
alert(info+"\n"+name+"的格式不正确:\n\""+value+"\"不是一个时间\n提示:[05:38:00]");
fm[i].focus();
return false;
}
}
else if(format=="hasChinese")
{
var _hasChinese=false;
for(var j=0;j255)
{
_hasChinese=true;
break;
}
}
if(!_hasChinese)
{
alert(info+"\n"+name+"的内容需要中文:\n\""+value+"\"不含有任何中文字符");
fm[i].focus();
return false;
}
}
else if(format=="allChinese")
{
for(var j=0;j255)
{
alert(info+"\n"+name+"的内容要求非中文:\n\""+value+"\"含有中文字符");
fm[i].focus();
return false;
}
}
}
else if(format!="")
{
//自定义
try
{
var found=value.match(eval(format));
if(found==null||found[0]!=value)
{
alert(info+"\n"+name+"的格式不不符合要求:\""+value+"\"\n提示:["+format+"]");
fm[i].focus();
return false;
}
}
catch(e)
{
alert(e.name+":\n["+fm[i].name+"]不合法的正则式\""+format+"\"");
return false;
}
}
}
return true;
}
function checkRadio(fm,opt)
{
var title=opt.title;
if(title=="")return true;//忽略未定义title的元素
var p=title.lastIndexOf("~");
if(p<0)return true;//忽略title中未定义检查格式的元素
var info=title.substring(0,p);
var format=title.substring(p+1,title.length);
var name=opt.name;
if(name=="")return true;//忽略没有名字的元素
if(format=="!")
{
//必须选择一个选项
if(typeof(fm.all[name].length)=="undefined")
{
//同名radio只有一个
if(opt.checked)
{
return true;
}
else
{
alert(info+"\n必须选择"+name);
opt.focus();
return false;
}
}
else
{
//是一个radio组
var radios=fm[name];
for(var j=0;jcheck_count)
{
alert(info+"\n"+name+"至少需要选择"+min[1]+"个选项");
opt.focus();
return false;
}
}
if(max!=null)
{
if(max[1]select_count)
{
alert(info+"\n"+name+"至少需要选择"+min[1]+"个选项");
sel.focus();
return false;
}
}
if(max!=null)
{
if(max[1]0)qStr="?"+qStr.substr(1);
return qStr;
}
function ec(va)
{
return va.replace(/\n/g,"%0D%0A");
}
//===============================our new js================
function checkFormField(fm,formobj){
var title=formobj.title;
if(title==""){
return true;//忽略未定义title的元素
}
var p=title.lastIndexOf("~");
if(p<0)return true;//忽略title中未定义检查格式的元素
var info=title.substring(0,p);
var format=title.substring(p+1,title.length);
var name=formobj.name;
if(name=="")return true;//忽略没有名字的元素
var value=trim(formobj.value);
//formobj.value=value;//自动除去提交项的两端的空格
if(formobj.type=="radio")
{
if(checkRadio(fm,formobj))
{
return true;
}
else
{
return false;
}
}
if(formobj.type=="checkbox")
{
if(checkCheckbox(fm,formobj))
{
return true;
}
else
{
return false;
}
}
if(formobj.type=="select-one")
{
if(checkSelectOne(formobj))
{
return true;
}
else
{
return false;
}
}
if(formobj.type=="select-multiple")
{
if(checkSelectMultiple(formobj))
{
return true;
}
else
{
return false;
}
}
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"+name+"的内容不可以为空。");
alert("<"+info+">的内容不可以为空。");
formobj.focus();
return false;
}
}
else
{
//内容可以为空时,
if(value=="")
return true;
}
//内容的长度判断
var colonP=format.indexOf(":");
if(colonP>0)
{
if(format.charAt(colonP-1)=='f')
{
var lengthLimit=format.substring(0,colonP-1);
if(!isNaN(lengthLimit))
{
if(value.length!=lengthLimit)
{
alert(info+"\n"+name+"的长度为"+value.length+"位,必须为"+lengthLimit+"位");
formobj.focus();
return false;
}
}
}
else
{
var lengthLimit=format.substring(0,colonP);
if(!isNaN(lengthLimit))
{
if(value.length>lengthLimit)
{
alert(info+"\n"+name+"的长度("+value.length+")超过限制"+lengthLimit);
formobj.focus();
return false;
}
}
}
format=format.substring(colonP+1,format.length);
}
if(format=="email")
{
//电子邮件格式
var found=value.match(/\w+@.+\..+/);
if(found==null)
{
alert(info+"\n"+name+"的格式不正确:\n\""+value+"\"不是一个Email地址");
formobj.focus();
return false;
}
}
else if(format=="int")
{
//整数
var intVal=parseInt(value);
if(isNaN(intVal)||intVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个整数。");
formobj.focus();
return false;
}
}
else if(format==">int0")
{
//大于0整数
var intVal=parseInt(value);
if(isNaN(intVal)||intVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个整数。");
formobj.focus();
return false;
}else if(intVal<=0){
alert(info+"\n"+value+"不是一个大于0的整数。");
formobj.focus();
return false;
}
}
else if(format=="float")
{
//浮点数
var floatVal=parseFloat(value);
if(isNaN(floatVal)||floatVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个浮点数。");
formobj.focus();
return false;
}
}
else if(format=="<1")
{
//浮点数
var floatVal=parseFloat(value);
if(isNaN(floatVal)||floatVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个有效的数。");
formobj.focus();
return false;
}else if(floatVal>100 || floatVal<=0){
alert(info+"\n"+value+"不是一个在0到100之间的数。");
formobj.focus();
return false;
}
}
else if(format==">0")
{
//浮点数
var floatVal=parseFloat(value);
if(isNaN(floatVal)||floatVal!=value)
{
alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个有效的数。");
formobj.focus();
return false;
}else if(floatVal<=0){
alert(info+"\n"+value+"不是一个大于0的数。");
formobj.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"+name+"的格式不正确:\n\""+value+"\"不是一个日期\n提示:[2000-01-01]");
formobj.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"+name+"的内容不正确:\n\""+value+"\"不是一个正确的日期\n提示:[2000-01-01]");
formobj.focus();
return false;
}
}
else if(format=="time")
{
//时间
var found=value.match(/(\d{2}):(\d{2}):(\d{2})/);
if(found==null||found[0]!=value||found[1]>23||found[2]>59||found[3]>59)
{
alert(info+"\n"+name+"的格式不正确:\n\""+value+"\"不是一个时间\n提示:[05:38:00]");
formobj.focus();
return false;
}
}
else if(format=="hasChinese")
{
var _hasChinese=false;
for(var j=0;j255)
{
_hasChinese=true;
break;
}
}
if(!_hasChinese)
{
alert(info+"\n"+name+"的内容需要中文:\n\""+value+"\"不含有任何中文字符");
formobj.focus();
return false;
}
}
else if(format=="allChinese")
{
for(var j=0;j255)
{
alert(info+"\n"+name+"的内容要求非中文:\n\""+value+"\"含有中文字符");
formobj.focus();
return false;
}
}
}
else if(format!="")
{
//自定义
try
{
var found=value.match(eval(format));
if(found==null||found[0]!=value)
{
alert(info+"\n"+name+"的格式不不符合要求:\""+value+"\"\n提示:["+format+"]");
formobj.focus();
return false;
}
}
catch(e)
{
alert(e.name+":\n["+formobj.name+"]不合法的正则式\""+format+"\"");
return false;
}
}
return true;
}
function checkDomain(fm){
var dmNameBase = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-";
var domain = fm.domainName;
var dmName = domain.value;
for(i=0;i=10000);
return ret;
}
*/