DooIT@江西搜才网

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  49 随笔 :: 17 文章 :: 1146 评论 :: 28 引用
本程序最初是由wanghr100(灰豆宝宝.net)的checkForm基础上进行修改的,增加了很多功能,如下:
  • 对非ie的支持
  • 增加了内置表达式和内置提示
  • 增加了显示方式(弹出式和页面显示式)
  • 增加了显示一条和显示全部
  • 进行了封装(CLASS_CHECK)
  • 支持外接函数或表达式(应用在密码一致)
  • 简化了调用方式,所有操作只需要<script language='javascript' src='checkform.js'>,然后在HTML里定义各标签验证格式
  • 对IE增加了对键盘输入的限制(如:定义usage='int'时,输入框只能输入数字
  • 增加了对disabled的不验证
  • 自定义报警方式(重写showMessageEx方法)
 
声明: 对本程序可以任意复制传播,但请保留声明部分,对于内置的表达式有些没有做到很严格,如果你有好的建议和意见,欢迎邮件和我联系或者上我的博客留言 

简介:

    本程序只需要对需要验证的标签设置三个属性:usage,exp,tip
 
  • usage     : 内置格式或表达式或函数
  • exp        : 正则表达式(注意如果指定了usage则忽略exp)
  • tip          : 出错提示(如果是内置格式可以不要此属性,有缺省提示)
 
    调用时只需要引用<script language='javascript' src='checkform.js'></script>,然后为每个标记增加以上3个属性(不一定需要全部) ,注意本js的默认编码是gb2312,如果你的.net程序是utf-8,可以把js另存为utf-8格式的,或者该webconfig里编码为gb2312
 
演示:
下载:
欢迎访问江西搜才网
posted on 2005-04-06 23:39 ttyp 阅读(14098) 评论(120) 编辑 收藏

评论

#21楼 2005-04-07 11:23 ayong
缺少标志符,字符串或数字
 回复 引用   

#22楼 2005-04-07 11:25 林和少      
我觉得很不错了。也比较通用。
但是有个问题,这种验证只是客户端的,
我们可以再改造一下做个能在.net服务器端验证。
这样就不怕恶意用户绕过客户端验证做非法的事。
Austin leng的提议是不错的。
 回复 引用 查看   

#23楼[楼主] 2005-04-07 11:29 ttyp      
to ayong:你可能是编码问题,保存为utf-8试试(checkform.js默认是gb2312的编码)

to 林和少:有时间在写服务端的,不过只能写asp.net的C#版了,其他无能为力,呵呵
 回复 引用 查看   

#24楼 2005-04-07 11:30 ayong
客户端验证只是提高用户的操作体验!

不能代替服务器端的安全性方面的验证!

 回复 引用   

#25楼 2005-04-07 11:41 ayong
改了编码后,
现在的效果:
如果设为int的话,就只能输入数字

如果是email 输入汉字,如果是
<input type="text" usage="email">
就清空
如果是<asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 40px" runat="server"
usage="email"></asp:TextBox>

没反应!
 回复 引用   

#26楼[楼主] 2005-04-07 11:46 ttyp      
我这正常,你在看看吧
 回复 引用 查看   

#27楼 2005-04-07 12:53 lu[未注册用户]
非常感謝﹗
 回复 引用   

#28楼 2005-04-07 13:08 lyman
为什么我引用总出错呀
 回复 引用   

#29楼[楼主] 2005-04-07 13:15 ttyp      
to lyman:保存为utf-8试试(checkform.js默认是gb2312的编码)
 回复 引用 查看   

#30楼 2005-04-07 14:11 hchxxzx
验证输入字数,可不可以以字节判断呢?我试验了一下,好像是以个数判断的
 回复 引用   

#31楼[楼主] 2005-04-07 14:16 ttyp      
不明白你的意思,如果你内置的不符合你的要求,你可以自己写正则,或者验证的函数
 回复 引用 查看   

#32楼 2005-04-07 15:39 ayong
页面上有两个按钮,现在我只想点击其中一个按钮的时候进行验证,另外一个按钮不需要验证。
如何实现!
 回复 引用   

#33楼[楼主] 2005-04-07 15:49 ttyp      
to ayong:这个是个BUG,做的时候没好好考虑.NET的服务端控件,呵呵
 回复 引用 查看   

#34楼 2005-04-07 15:52 ayong
不会吧!那咋办啊!我正打算把它用到我现在做的项目中去呢!
 回复 引用   

#35楼[楼主] 2005-04-07 15:54 ttyp      
尽快修改这个问题吧
 回复 引用 查看   

#36楼 2005-04-07 16:31 ayong
搞定了能不能通知我一声!
感谢!
QQ:339558
msn&Email : cari_ayong AT hotmail.com
 回复 引用   

#37楼[楼主] 2005-04-07 17:04 ttyp      
刚才已经修复了,解决办法是不需要验证的按钮加上check=false属性,顺便加强了ip验证,已经下载的请重新下载一个
 回复 引用 查看   

#38楼 2005-04-08 08:03 生活、工作      
请加个小数(0-1)的验证吧。
 回复 引用 查看   

#39楼[楼主] 2005-04-08 08:47 ttyp      
to 生活、工作:
什么意思,说明理由
 回复 引用 查看   

#40楼 2005-04-08 10:36 rainman
啊呀!怎么下不下来了阿?
 回复 引用   

#41楼[楼主] 2005-04-08 10:59 ttyp      
下不下来看看这个
http://www.cnblogs.com/Files/ttyp/checkform.rar
 回复 引用 查看   

#42楼 2005-04-08 11:03 lwlmaomao
有没有办法在指定的地方输出错误提示,你现在是统一在最form的最底下显示
 回复 引用   

#43楼[楼主] 2005-04-08 11:09 ttyp      
有,你在网页里添加一个<div id="divErrorMessage"></div>
或者span,消息就会显示在里面,或者你看最后一个例子,重写显示方法,它把显示改到title里了
 回复 引用 查看   

#44楼 2005-04-08 15:08 怪手大分
在。net下,我怎么用不了啊,把你的列子直接拷过去也没效果,说是网页错误!
 回复 引用   

#45楼[楼主] 2005-04-08 15:12 ttyp      
js编码问题,另存为utf-8格式
 回复 引用 查看   

#46楼 2005-04-09 05:22 xiaohui
如果需要验证很多条信息,分别在每个TextBox的右边显示错误提示,怎么办?
 回复 引用   

#47楼[楼主] 2005-04-09 09:53 ttyp      
to xiaohui:这个没有办法不太好操作,主要是对排版不方便
 回复 引用 查看   

#48楼 2005-04-09 22:36 hawk
thanks
 回复 引用   

#49楼 2005-04-13 14:58 roket
没有服务器端验证太不安全了。
 回复 引用   

#50楼 2005-04-15 14:15 仁渣      
呵呵,原来我抢在楼主的前面做了这类控件了,不过感谢TTYP兄对我的一些建议,
楼上要封装成控件的,可以到我的Blog中去下:
http://www.cnblogs.com/thinhunan
 回复 引用 查看   

#51楼[楼主] 2005-04-15 16:42 ttyp      
一直没动手做成.net的控件,是我在考虑做成什么样子的比较好~,再说最近还有点忙~
 回复 引用 查看   

#52楼 2005-05-02 20:59 Notus@下雨吧~~      
我想这样:一个文本框或者没有内容,或者填的内容符合要求,这两种情况都可以通过验证,请问该怎么做?
 回复 引用 查看   

#53楼[楼主] 2005-05-03 08:29 ttyp      
只要给文本框写正确的正则,exp="...."
 回复 引用 查看   

#54楼 2005-05-03 09:31 Notus@下雨吧~~      
-_-

老大,我对那些火星语不时很了解阿,您能告诉我允许空或数字的正则该怎么写? 主要是允许空……
 回复 引用 查看   

#55楼[楼主] 2005-05-03 11:30 ttyp      
(^\s*$)|(^\d*$)
 回复 引用 查看   

#56楼 2005-05-04 09:24 Notus@下雨吧~~      
谢谢 :)
 回复 引用 查看   

#57楼 2005-05-05 19:51 xuandme
非常感谢
 回复 引用   

#58楼 2005-05-24 12:25 sunrise
就这个而已,我的比这强多了。
 回复 引用   

#59楼[楼主] 2005-05-24 15:20 ttyp      
to sunrise:那请留下连接,好让大家来学习您的大作
 回复 引用 查看   

#60楼 2005-05-26 19:31 我佛山人
http://www.wishwing.net/Validator.htm
http://www.wishwing.net/Validator.rar

我也做了类似的表单验证类
 回复 引用   

真的不错,it is very good
 回复 引用   

#62楼 2005-06-21 19:12 qixin000
我觉得你这样一封装置后,我都不知道怎么在页面中用脚本调用了,我觉得你这样做成自动绑定的方式,有好的一面,但是灵活性差了很多,我更新换用原来的那个由wanghr100写的脚本,可以自己根据情况调用,而不必被你的自动绑定的验证脚本绑死,所以我觉得还是别人能够更好的调用为好
 回复 引用   

#63楼[楼主] 2005-06-21 21:16 ttyp      
谁说灵活差好多啊,你能举个例子么?你可以完全不用默认的绑定,你详细研究下例子
 回复 引用 查看   

#64楼 2005-07-07 11:17 JK[未注册用户]
几点意见:
1.显示验证结果的方式太过特殊,如果用户想加上自己的验证(如多个checkbox必须至少选两个),则提示风格很难做到一致.
2.js的结构不大好,没有将验证方法独立出来,如果用户在load之后又有一个生成一个input,或是将一个disabled的input改成enable的,再想加上验证就很麻烦
3.例如是一张PO,有两个按钮,一个是存盘,一个是确认,存盘是只需验证前三项的必须输入,确认时要验证前十项的必须输入,就没办法做了

其中第一条,第三条比较严重,值得警惕
 回复 引用   

#65楼 2005-07-20 08:54 Boler      
JK的提议很重要,第3个问题属于分区验证问题,一直困惑我好长时间,听说Asp.Net 2.0 提供验证组的概念,实现了分区验证!
 回复 引用 查看   

#66楼[楼主] 2005-07-20 13:07 ttyp      
意见都不错!谢谢
 回复 引用 查看   

#67楼 2005-09-12 23:45 afei[未注册用户]
大哥
在你的代码中,用RegExp的test()来检测数据是否匹配,不够精确,比如
我要输入四位数字\S{4},用test()方法,那么>=4的数字都是匹配的。
 回复 引用   

#68楼[楼主] 2005-09-13 08:36 ttyp      
匹配四位数字的表达式是
/^\d{4}$/

请注意边界符号的使用
 回复 引用 查看   

#69楼 2005-09-13 11:01 haha[未注册用户]
问个问题,在调用的js时,如果碰上一个页面有两个form,分别有功能,互不干涉,
在做输入检测时很容易两个都检测,比如递交了上一个,下面的也输出了出错信息,
怎么办呢?
还有里面的oform怎么传的,我那里可以控制不同的form?
 回复 引用   

#70楼 2005-09-13 11:06 afei [未注册用户]
谢了,看来我对正则表达式掌握不够^_^
 回复 引用   

#71楼 2005-09-13 12:54 haha[未注册用户]
大哥,对刚才的问题我追踪了一下,发现出问题在这段:
window.attachEvent("onload",function() { for(var i=0;i<document.forms.length;i++) { var theFrom = document.forms[i];
if(theFrom){
theFrom.attachEvent("onsubmit",function(){
return checkForm(theFrom);
} );
theFrom.attachEvent("onclick",function(){ var o = event.srcElement; if(typeof(o.type)!="undefined"){ var check = o.getAttribute("check");
if(typeof(check)!="undefined"&&check! =null&&check.toLowerCase()=="false"){ me.cancel = true; } } });
}
}
});

比如对于form1,form2,form3三个表单,在for循环遍历后,theForm的值还是
form3,所以点击form1和form2的submit按钮时,实际绑定的都是form3的onsubmit事件(不知对否?)。由于对全局绑定事件不熟,所以请大哥指教。
 回复 引用   

#72楼[楼主] 2005-09-13 13:26 ttyp      
对于“比如对于form1,form2,form3三个表单,在for循环遍历后,theForm的值还是form3”,请仔细看看为什么会这样,是不是FORM的名字都一样,正确的是每次循环theForm都会变的
 回复 引用 查看   

#73楼 2005-09-13 14:14 haha[未注册用户]
不是的,我举个例子,就以你的demo1为例,改一下:
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*, com.inc.intranet.vo.*" errorPage="" %>
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<HEAD>
<SCRIPT language=JavaScript src="checkform.js"></script>
<SCRIPT language=JavaScript>
function test()
{
return document.getElementById('password').value==document.getElementById('rpassword').value;
}

</SCRIPT>

</HEAD>
<BODY>基本表达式测试:
<FORM name="form1" >
test:<INPUT type="text" name="test">不验证<BR>
姓名:<INPUT type="text" name="user" Tip="姓名不能为空" Exp="[^ ]+" disabled="true">Disabled不验证<BR>
账号:<INPUT name=id Tip="账号不能为空" Exp="[^ ]+">不能为空<BR>
IP:<INPUT type="text" name="iP" usage="ip4">ip<BR>
密码:<INPUT type="text" type="password" id="password" name=password Tip="密码四位" Exp="/^\d{4}$/">六位以上<BR>
重复密码<INPUT type="password" id="rpassword" name="rpassword" usage="test()" tip="重复密码不一致!" >重复密码<BR>
<INPUT type="submit" value="提交">
</FORM>
<FORM name="form2" >
电话:<INPUT name=number Tip="电话号码含有非法字符" Exp="^\d+$"><BR>
相片上传:<INPUT type=file name=pic Tip="相片应该为JPG,BMP格式的" Exp="(.*)(\.jpg|\.bmp)$"><BR>
出生日期:<INPUT name=dt Tip="日期格式2004-08-10" Exp="^\d{4}\-\d{1,2}-\d{1,2}$">日期格式2004-08-10<BR>
省份: <SELECT name=sel Tip="请选择所在省份" Exp="^0$"><OPTION value="" selected>请选择<OPTION value=1>福建省<OPTION value=2>湖北省</OPTION></SELECT> <BR>
<INPUT type="submit" value="提交">
</FORM>
<FORM name="form3" >
选择你喜欢的运动:<BR>游泳<INPUT type=checkbox name=c Tip="请选择2项或以上" Exp="^0{2,}$" disabled> 篮球<INPUT type=checkbox name=c> 足球<INPUT type=checkbox name=c> 排球<INPUT type=checkbox name=c> <BR>
你的学历: 大学<INPUT type=radio name=r Tip="请选择一项学历" Exp="^0$"> 中学<INPUT type=radio name=r> 小学<INPUT type=radio name=r> <BR>
个人介绍: <TEXTAREA name=txts Tip="个人介绍不能为空,且不少于20字" Exp="^[\s|\S]{20,}$"></TEXTAREA>20个字以上
<INPUT type="submit" value="提交">
</FORM>
</BODY>
</HTML>


无论是点击form1,form2的submit,他显示的都是form3检测出来的错误。
 回复 引用   

#74楼[楼主] 2005-09-13 15:03 ttyp      
to haha:谢谢你提出这个非常经典的问题

解决方法是修改那段为:

if(window.attachEvent)
{
window.attachEvent("onload",function()
{
for(var i=0;i<document.forms.length;i++)
{
var theFrom = document.forms[i];
function mapping(f){
f.attachEvent("onsubmit",function(){return checkForm(f);});
}

if(theFrom)
{
mapping(theFrom);
theFrom.attachEvent("onclick",function(){
var o = event.srcElement;
if(typeof(o.type)!="undefined")
{
var check = o.getAttribute("check");
if(typeof(check)!="undefined"&&check!=null&&check.toLowerCase()=="false")
{
me.cancel = true;
}
}
}
);
}
}
}
);

}


详细的讨论见:
http://community.csdn.net/Expert/topic/3271/3271263.xml?temp=1.498049E-02
 回复 引用 查看   

#75楼 2005-09-13 15:42 haha[未注册用户]
ths
 回复 引用   

#76楼 2005-09-19 19:06 lee[未注册用户]
条件验证可不可以?
比如选择a时候可以不选c
选择b时候必须选择c
 回复 引用   

#77楼[楼主] 2005-09-20 08:29 ttyp      
可以,详细见
http://dooit.3322.org/checkform/demo3.htm
 回复 引用 查看   

#78楼 2005-09-22 17:40 popoer[未注册用户]
一个小BUG,调用g_check.checkForm()后没有返回值,原因是
me.checkForm = function(e){ checkForm(e);}这里没有返回值,加上return就好了,希望在后续的下载中能修正~
 回复 引用   

#79楼[楼主] 2005-09-22 20:19 ttyp      
多谢多谢,这几天改得,没注意:)
 回复 引用 查看   

#80楼 2005-10-14 14:19 zwb[未注册用户]
如果一个字段我可以不输入,但如果输入就必须输入数字,这样的情况能不能处理呢?
 回复 引用   

#81楼[楼主] 2005-10-14 16:12 ttyp      
exp="^\d*$"
 回复 引用 查看   

#82楼 2005-11-12 17:56 aqua[未注册用户]
在.net中一个页面只允许一个from runat=server,为了分开验证.我建了两个form 即<form name=form1>,<form name=form2> .from1里的验证可以.from2里的验证就出问题了.怎么才能避免重复验证的.? 我的按钮是<asp:button id="Save" runat="server" Text="保存" Visible="True"></asp:button>例子demo1中的onclick="if(g_check.checkForm(this.form))alert();"怎么加上去? 我如果这样写<asp:button id="Save" runat="server" Text="保存" Visible="True" onclick="javascript:if(g_check.checkForm(this.form))alert();"></asp:button> .net会报错.
 回复 引用   

#83楼[楼主] 2005-11-12 19:47 ttyp      
在form_load里这样加
Save.Attributes.Add("onclick","javascript:if(g_check.checkForm(this.form))alert();");
 回复 引用 查看   

#84楼 2005-11-13 14:58 aqua[未注册用户]
谢谢
 回复 引用   

#85楼 2005-11-23 10:35 ahua[未注册用户]
请问一下.颜色的正则表达式怎么写? 格式为0xFF0000 而不是#FF0000 谢谢
 回复 引用   

#86楼[楼主] 2005-11-23 11:02 ttyp      
/^0[xX][0-9a-fA-F]{6}$/
 回复 引用 查看   

#87楼 2005-11-23 12:38 ahua[未注册用户]
非常感谢
 回复 引用   

#88楼 2005-11-24 10:44 ahua[未注册用户]
再问一下,加了验证之后 文本框不能复制被 粘贴怎么办?
 回复 引用   

#89楼[楼主] 2005-11-24 10:54 ttyp      
如果验证框只能输入数字,非数字的内容是不能粘贴过来的。不能被复制?没有啊
 回复 引用 查看   

#90楼 2005-11-24 11:04 ahau[未注册用户]
我试了一下.像 demo2.htm中 浮点数 .我无法拷入数据. 而手动输入则可以的. 可以考一下旁边的56.4试试
 回复 引用   

#91楼[楼主] 2005-11-24 11:39 ttyp      
我已经修改了,请在下载2下载示例,在线显示暂时没有更新,注意:粘贴时有空格和回车也不能粘贴
 回复 引用 查看   

#92楼 2005-11-24 12:56 ahua[未注册用户]
不好意思.再次打扰. 能否告诉我一下checkform.js哪里被修改过了. 因为我发现替换以后js报错. 而用原来的checkform.js就没有问题
 回复 引用   

#93楼[楼主] 2005-11-24 13:15 ttyp      
function myKeyCheck(oForm){
var els = oForm.elements;
//遍历所有表元素
for(var i=0;i<els.length;i++){
//取得格式
var sUsage = els[i].getAttribute("Usage");

//如果设置Usage,则使用内置正则表达式,忽略Exp
if(typeof(sUsage)!="undefined"&&sUsage!=null){
switch(sUsage.toLowerCase ()){
case "zipcode":
case "int":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /\d/.test(String.fromCharCode(chr))||(this.value.indexOf('+')<0?String.fromCharCode(chr)=="+":false)||(this.value.indexOf('-')<0?String.fromCharCode(chr)=="-":false);}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/\D/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "mobile":
case "int+":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /\d/.test(String.fromCharCode(chr))||(this.value.indexOf('+')<0?String.fromCharCode(chr)=="+":false);}
els[i].onpaste = function(e){if(e==null)if(e==null)return !clipboardData.getData('text').match(/[^\d\+]/); else return false; else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "int-":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /\d/.test(String.fromCharCode(chr))||(this.value.indexOf('-')<0?String.fromCharCode(chr)=="-":false);}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\-]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "float":
case "num":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\+\-\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.\+\-]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "float+":
case "num+":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\+\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.\+]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "float-":
case "num-":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\-\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.\-]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "ascii":
els[i].style.imeMode= "disabled";
break;
case "ip4":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
els[i].maxLength = 15;
break;
case "color":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[a-fA-Z]|\d/.test(String.fromCharCode(chr))||(this.value.indexOf('#')<0?String.fromCharCode(chr)=="#":false);}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\#]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].maxLength = 7;
els[i].style.imeMode= "disabled";
break;
case "date":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\/\-\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.\-]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
}
}
}


这个函数改了,以前都是.match(/\D/),另外注意下你的js的编码格式(utf-8或gb2312)和程序相对应
 回复 引用 查看   

#94楼 2005-11-24 17:27 ahua[未注册用户]
呵呵.问题解决了. 忘了变换编码了. 再次感谢您耐心的解答,谢谢
 回复 引用   

#95楼 2005-12-01 13:04 cnscn[未注册用户]
把原来内容组织了一下:
"numencn" :"^[\\d_a-zA-Z\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$", //仅数字、英文、下线、中文字符
"numen" :"^[\\d_a-zA-Z]+$", //仅数字、英文、下线字符
 回复 引用   

#96楼 2005-12-07 10:25 SK
我照着你的checkform.js輸入, 拷貝你的demo2程序過來, 為何在執行時沒有效果?
 回复 引用   

#97楼 2005-12-07 11:11 SK
我的意思是我可以輸入字串在我的demo2.htm 中的整數, 為何會這樣? 是否我放少了某些步驟? 請指教, 謝謝!
 回复 引用   

#98楼[楼主] 2005-12-07 12:00 ttyp      
直接运行演示也没效果吗?出错了么,多半是文件编码的问题
 回复 引用 查看   

#99楼 2005-12-07 12:34 SK
直接运行演示没效果, 我的JS文件编码如下:
1. checkform.js :
function myKeyCheck(oForm){
var els = oForm.elements;
for(var i=0;i<els.length;i++){
var sUsage = els[i].getAttribute("Usage");
if(typeof(sUsage)!="undefined"&&sUsage!=null){
switch(sUsage.toLowerCase ()){
case "zipcode":
case "int":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /\d/.test(String.fromCharCode(chr))||(this.value.indexOf('+')<0?String.fromCharCode(chr)=="+":false)||(this.value.indexOf('-')<0?String.fromCharCode(chr)=="-":false);}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/\D/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "mobile":
case "int+":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /\d/.test(String.fromCharCode(chr))||(this.value.indexOf('+')<0?String.fromCharCode(chr)=="+":false);}
els[i].onpaste = function(e){if(e==null)if(e==null)return !clipboardData.getData('text').match(/[^\d\+]/); else return false; else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "int-":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /\d/.test(String.fromCharCode(chr))||(this.value.indexOf('-')<0?String.fromCharCode(chr)=="-":false);}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\-]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "float":
case "num":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\+\-\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.\+\-]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "float+":
case "num+":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\+\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.\+]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "float-":
case "num-":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\-\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.\-]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
case "ascii":
els[i].style.imeMode= "disabled";
break;
case "ip4":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
els[i].maxLength = 15;
break;
case "color":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[a-fA-Z]|\d/.test(String.fromCharCode(chr))||(this.value.indexOf('#')<0?String.fromCharCode(chr)=="#":false);}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\#]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].maxLength = 7;
els[i].style.imeMode= "disabled";
break;
case "date":
els[i].onkeypress = function(e){var chr;if(e)chr=e.charCode; else chr=window.event.keyCode;if(chr==0)return true; else return /[\/\-\.]|\d/.test(String.fromCharCode(chr));}
els[i].onpaste = function(e){if(e==null)return !clipboardData.getData('text').match(/[^\d\.\-]/); else return false;}
els[i].ondragenter = function(e){return false;}
els[i].style.imeMode= "disabled";
break;
}
}
}
 回复 引用   

#100楼 2005-12-07 12:40 SK
我的Demo2.aspx文件编码如下:

2. demo2.aspx
<%@ Page Language="vb" ContentType="text/html; charset=utf-8" AutoEventWireup="false" Codebehind="demo2.aspx.vb" Inherits="OthIncNoti.demo2"%>
<HTML>
<HEAD>
<title>demo2</title>
<DOCTYPE HTML PUBLIC EN Transitional 4.0 DTD W3C??->
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<SCRIPT language="JavaScript" src="checkform.js"></SCRIPT>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
A/C:<INPUT name="id" usage="notempty">Can't be blank<BR>
Int number:<INPUT usage="int">46<BR>
Positive Int:<INPUT usage="int+">13<BR>
Negative Int:<INPUT usage="int-">-45<BR>
Float number:<INPUT usage="float">56.4<BR>
Positive Float:<INPUT usage="float+">1.0<BR>
Negative Float:<INPUT usage="float-">-1.0<BR>
No:<INPUT usage="num">345<BR>
Positive No:<INPUT usage="num+">+1<BR>
Negative No:<INPUT usage="num-">-1.0<BR>
Email:<INPUT usage="email">ttyp@21cn.com<BR>
Colour:<INPUT usage="color">#f0f0f0<BR>
Website:<INPUT usage="url">http://www.cnblogs.com/ttyp<BR>
Chinese:<INPUT usage="chinese"><BR>
ascii:<INPUT usage="ascii">Allow abc<BR>
Postcode:<INPUT usage="zipcode">200083<BR>
H/P:<INPUT usage="mobile">13678452345<BR>
IP:<INPUT usage="ip4">192.168.0.1<BR>
Picture:<INPUT type="file" usage="picture">c:\a.jpg<BR>
Rar File:<INPUT type="file" usage="rar">c:\a.rar<BR>
Date:<INPUT usage="date">2005-04-12<BR>
<INPUT type="submit" value="submit">
</form>
</body>
</HTML>

我是初學者, 是否我遺漏了什麼? 請多多指教, 謝謝!
 回复 引用   

#101楼[楼主] 2005-12-07 15:36 ttyp      
我是说把checkform.js的编码格式转换下,一般另存为gb2312编码格式
 回复 引用 查看   

#102楼 2005-12-07 17:05 SK
對不起, 請問怎樣能夠另存為gb2312编码格式呢? 當我按檔案另存時, 我只能選擇 JScript Files 或 VBScript Files 或 其他 Files, 并沒有gb2312编码格式可供選擇, 我是新手, 實在不懂如何下手, 敬請多多包涵! 謝謝!
 回复 引用   

#103楼[楼主] 2005-12-12 10:02 ttyp      
记事本打开,另存为对话框,最下面有选择编码格式的,选UNICODE
 回复 引用 查看   

#104楼 2006-01-18 11:41 ahua[未注册用户]
请问在datagrid中如何进行验证.比如datagrid在新加行中进行验证. 可是点击编辑得时候也总是跳出验证来.这种情况怎么处理?
 回复 引用   

#105楼[楼主] 2006-01-18 14:25 ttyp      
在ItemDataBound事件中,给不需要验证的连接加上check=false属性
 回复 引用 查看   

#106楼 2006-01-18 15:16 ahaua[未注册用户]
那"更新"按钮是需要验证得. 比如我在编辑得时候"更新"按钮即使直接更新.那它也会触发"添加"按钮得验证. 请问这种情况怎么解决呢?
 回复 引用   

一个页面两个表单的时候会有问题
 回复 引用   

#108楼[楼主] 2006-04-07 11:36 ttyp      
什么问题?
 回复 引用 查看   

#109楼 2006-04-12 09:40 uuq[未注册用户]
我也遇到过
一个页面两个表单的时候会有问题

如果页面有两个需要使用这样验证,就有问题
 回复 引用   

Exp="^\d{15}|\d{18})$"请问这样的表达式错在哪儿,为什么这个表达式不能用在该JS中?!
 回复 引用   

上面写错了,应该是Exp="^\d{15}|\d{18}$"
但是没有办法用,用Exp="^\d{15}$"就没有问题
 回复 引用   

#112楼[楼主] 2006-05-08 19:07 ttyp      
Exp="^(\d{15}$)|(^\d{18}$)"
 回复 引用 查看   

#113楼 2006-06-30 16:42 aqua[未注册用户]
还是以前的问题.一直没有解决.可能我说的不太明白.请问在asp.net的datagrid中如何进行验证.比如datagrid在新加行中进行验证. 可是点击编辑得时候也总是跳出验证来.这种情况怎么处理? 就是说在编辑的时候.需要对编辑的文本框验证. 可是实际结果是跳出来的是"添加"时候的文本框验证. 现在想实现的情况是点"编辑"按钮对编辑部分的文本框验证.点"添加"按钮对添加部分的文本框验证.请问有什么方法可以解决.谢谢
 回复 引用   

#114楼[楼主] 2006-06-30 17:04 ttyp      
http://ttyp.cnblogs.com/archive/2005/05/01/148432.html

下载新的事例看看
 回复 引用 查看   

#115楼 2007-01-29 21:24 2[未注册用户]
@ttyp
33244
 回复 引用   

#116楼 2007-04-16 17:30 3356[未注册用户]
谢谢了··· 哈哈
 回复 引用   

#117楼 2007-10-25 11:09 西[未注册用户]
谢谢楼主~~~~

对IE增加了对键盘输入的限制(如:定义usage='int'时,输入框只能输入数字(非IE无效)------这个好像对firefox也有效的呢

 回复 引用   

#118楼 2007-11-17 22:58 tomlu[未注册用户]
楼主为什么我引入该代码,在firefox没有问题而在普通ie下就找不到CLASS_CHECK?
 回复 引用   

#119楼 2008-06-12 10:24 judey[未注册用户]
请闻如何自已定义TIP的显示位置,或者把每个TIP显示在相应的输入后面.就像VS里面的那验证类一样
求助啊.....
 回复 引用   

Exp="^(\S{5,}$)|(^[^*%#!-&%$]$)"
这样写对吗?
 回复 引用   

评论共2页: 上一页 1 2