在网上找到一篇关于js表单验证的代码:
http://blog.yesky.com/Blog/_grace/archive/2005/01/10/62725.html
[code]
<input type="text" check="^/d+$" warning="电话号码含有非法字符" name="number" value="">
[/code]
文中在input中加入了check和warning属性,表单验证的功能是实现了,但没法通过代码的验证,我想到了把check,warning分别用lang,title来代替,这样能通过代码的验证,但不知道可行不?
以后会不会出现什么问题?
请高手指教.
另附上我改过后的代码.
[html]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script language="JavaScript" type="text/javascript">
////////////////////////////////////////////////////////////////////////////////
/*
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
* 功能:通用验证所有的表单元素.
* 使用:
* <form name="form1" onsubmit="return CheckForm(this)">
* <input type="text" name="id" check="^/S+$" warning="id不能为空,且不能含有空格">
* <input type="submit">
* </form>
* author:wanghr100(灰豆宝宝.net)
* email:wanghr100@126.com
* update:19:28 2004-8-23
* 注意:写正则表达式时一定要小心.不要让"有心人"有空子钻.
* 已实现功能:
* 对text,password,hidden,file,textarea,select,radio,checkbox进行合法性验证
* 待实现功能:把正则表式写成个库.
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
*/
////////////////////////////////////////////////////////////////////////////////
//主函数
function CheckForm(oForm)
{
var els = oForm.elements;
//遍历所有表元素
for(var i=0;i<els.length;i++)
{
//是否需要验证
if(els[i].lang)
{
//取得验证的正则字符串
var sReg = els[i].lang;
//取得表单的值,用通用取值函数
var sVal = GetValue(els[i]);
//字符串->正则表达式,不区分大小写
var reg = new RegExp(sReg,"i");
if(!reg.test(sVal))
{
//验证不通过,弹出提示warning
alert(els[i].title);
//该表单元素取得焦点,用通用返回函数
GoBack(els[i])
return false;
}
}
}
}
//通用取值函数分三类进行取值
//文本输入框,直接取值el.value
//单多选,遍历所有选项取得被选中的个数返回结果"00"表示选中两个
//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个
function GetValue(el)
{
//取得表单元素的类型
var sType = el.type;
switch(sType)
{
case "text":
case "hidden":
case "password":
case "file":
case "textarea": return el.value;
case "checkbox":
case "radio": return GetValueChoose(el);
case "select-one":
case "select-multiple": return GetValueSel(el);
}
//取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function GetValueChoose(el)
{
var sValue = "";
//取得第一个元素的name,搜索这个元素组
var tmpels = document.getElementsByName(el.name);
for(var i=0;i<tmpels.length;i++)
{
if(tmpels[i].checked)
{
sValue += "0";
}
}
return sValue;
}
//取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function GetValueSel(el)
{
var sValue = "";
for(var i=0;i<el.options.length;i++)
{
//单选下拉框提示选项设置为value=""
if(el.options[i].selected && el.options[i].value!="")
{
sValue += "0";
}
}
return sValue;
}
}
//通用返回函数,验证没通过返回的效果.分三类进行取值
//文本输入框,光标定位在文本输入框的末尾
//单多选,第一选项取得焦点
//单多下拉菜单,取得焦点
function GoBack(el)
{
//取得表单元素的类型
var sType = el.type;
switch(sType)
{
case "text":
case "hidden":
case "password":
case "file":
case "textarea": el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();
case "checkbox":
case "radio": var els = document.getElementsByName(el.name);els[0].focus();
case "select-one":
case "select-multiple":el.focus();
}
}
</script>
</head>
<body>
通用表单函数测试:
<form method="post" name="form1" onsubmit="return CheckForm(this)">
test:
<input type="text" name="test">不验证<br>
账号:<input type="text" lang="^/S+$" title="账号不能为空,且不能含有空格" name="id">不能为空<br>
密码:<input type="password" lang="/S{6,}" title="密码六位以上" name="id">六位以上<br>
电话:<input type="text" lang="^/d+$" title="电话号码含有非法字符" name="number" value=""><br>
相片上传:<input type="file" lang="(.*)(/.jpg|/.bmp)$" title="相片应该为JPG,BMP格式的" name="pic" value="1"><br>
出生日期:<input type="text" lang="^/d{4}/-/d{1,2}-/d{1,2}$" title="日期格式2004-08-10" name="dt" value="">日期格式2004-08-10<br>
省份:
<select name="sel" lang="^0$" title="请选择所在省份">
<option value="">请选择</option>
<option value="1">福建省</option>
<option value="2">湖北省</option>
</select>
<br>
选择你喜欢的运动:<br>
游泳<input type="checkbox" name="c" lang="^0{2,}$" title="请选择2项或以上">
篮球<input type="checkbox" name="c">
足球<input type="checkbox" name="c">
排球<input type="checkbox" name="c">
<br>
你的学历:
大学<input type="radio" name="r" lang="^0$" title="请选择一项学历">
中学<input type="radio" name="r">
小学<input type="radio" name="r">
<br>
个人介绍:
<textarea name="txts" lang="^[/s|/S]{20,}$" title="个人介绍不能为空,且不少于20字" rows="10" cols="20"></textarea>20个字以上
<input type="submit">
</form>
</body>
</html>
[/html]
![]() 但是 你太执着了,为什么非要追求什么代码验证呢? 所谓酒肉穿肠过,佛祖心中留.标准只是一个形式,真的明白了为什么要有这个标准,就不用在意这点问题了. 本来每个元素都是一个对象,给这些对象添加自定义的属性没什么不对,可html和xhtml不允许.所有标准不允许的东西怎么办那?绝招:javascript.想必誓死追随标准的同志们都会这样做(特指使用document.write和innerHTML来输出"非法"代码的行为).其实这样做完全是自欺欺人!虽然通过了验证但这个思想却严重背离了标准.(要这么说我就写个asp,凡请求来源是w3.org的一律输出标准空文档,^_^绝对在任何时候都是完全标准). 验证只是一个手段,并不是说通不过验证就是错的,而且现在的标准也并不是完美的.所以想怎么做就怎么做,毕竟浏览者是看你的效果,不是看你的代码,不是看那个黄不拉叽的小标志. PS.标准就像女人,不能没有,但事事都依着标准的话,那....^_^ |
![]() |