使用js判断表单输入的数据类型,有点不如意,进来帮帮忙吧!
张群区块链 业界专家认证 2004-06-24 11:29:18 测试:在文本框试图输入非法字符
1.为什么输入第一个非法字符的时候不报错,第二个才有提示信息?
2.怎么才在“确定”报错信息后清空文本框,我使用s.vlaue="";为什么不行?
3.我不懂正则表达式,这些东西弄得我头疼,那里有基础教程?
请大虾看看代码
表单如下:
<form name="frm">
<input valtype="zh" onKeypress="chkall(this);" name="hotelname">
<input name="addr" valtype="r" onKeyPress="chkall(this);" name="tim">
<input name="full" valtype="sh" onKeyPress="chkall(this);" name="sia">
</form>
函数如下:
function String.prototype.trim(){return this.replace(/(^\s*)|(\s*$)/g, "");}
function chkall(obj){
a=obj.valtype;
switch (a){
case "r":
isDate(obj);
case "sh":
isNumeric(obj);
case "k":
isZero(obj);
case "y":
isMail(obj);
case "zh":
isChinese(obj);
}
}
function isDate(s,msg){
if (s.value.length==0)return true;
if (!msg)msg='请输入正确的日期';
var str=s.value
var reg = /^(\d{4})(-|\/)(0?[1-9]|1[0-2])(-|\/)(0?[1-9]|[12][0-9]|3[01])$/g;
var r = reg.exec(str);
if(r==null){alert(msg);s.select();return false;}
var d = new Date(r[1], r[3]-1,r[5]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate()
var reg=/(\/|-)(0*)( *)([1-9])/g
var t=s.value.replace(reg,'$1$4')
if (newStr==t){return true;}
s.focus();
s.select();
alert(msg);
return false;
}
function isEmail(s,msg){
if (s.value.length==0)return true;
var reg = /^([a-z]){1,}([\.a-z0-9_\-]){1,}([a-z0-9]){1,}@([a-z0-9_-]){3,}(\.([a-z0-9]){2,4}){1,2}$/gi;
if (reg.test(s.value))return true;
else {
s.value="";
s.focus();
alert((msg?msg:'请输入正确的E_mail'));
return false;
}
}
function isChinese(s,msg){
var reg = /[^\u4E00-\u9FA5]/g;
if (reg.test(s.value)){
alert((msg?msg:'只能输入中文,请改正'));
event.returnValue=false;
}
return true;
}
function isNumeric(s,msg){
if (s.value*1!=s.value){
alert((msg?msg:'该栏只能输入数字﹐请改正'))
s.focus();
s.select();
return false
}
return true
}