对于一个系统,用户可以输入数据即代表着不安全,尤其在用户是网络上的任意人的时候,我们没有办法假定用户按照我们的要求去输入数据,也没有办法假定用户的所有输入都是善意的,在这种情况下,验证用户的输入数据就变得十分重要。以下举几种常见的验证(以textbox为例)。 1长度验证(验证字符长度) MaxLength="value" 其中value代表允许输入的最大字符数,如: <asp:TextBox ID="txt_No1" runat="server" MaxLength="20"></asp:TextBox> 但是英文字符占一字节,中文汉字中字符占2字节,在varchar类型的数据库总,采用字符的验证标准显然不符合要求,字母数字的ascii编码都小于255而汉字的编码肯定大于255,我们可以使用此方法来判断字符串占用的是一个字节还是两个字节。因此,我们可以通过自定义两个JavaScript函数,在通过input的onkeyup事情触发函数来解决此问题。实现代码如下: //判断字符串所占的字节数 function GetCharLength(str) { var iLength = 0; //记录字符的字节数 for(var i = 0;i<str.length;i++) //遍历字符串中的每个字符 { if(str.charCodeAt(i) >255) //如果当前字符的编码大于255 { iLength += 2; //所占字节数加2 } else { iLength += 1; //否则所占字节数加1 } } return iLength; //返回字符所占字节数 } //若字符串长度超过要求,截掉多余部分 function CutStr(elementID,len) //elementID表示要进行处理的对象ID,len表示设置的限制字节数 { var str = document.getElementById(elementID).value; //获取要处理的字符串 var curStr = ""; //用于实时存储字符串 for(var i = 0;i<str.length;i++) //遍历整个字符串 { curStr += str.charAt(i); //记录当前遍历过的所有字符 if(GetCharLength(curStr )>len) //如果当前字符串超过限制长度 { document.getElementById(elementID).value = str.substring(0,i); //截取多余的字符,并把剩余字符串赋给要进行处理的对象 return; //结束函数 } } } 通过onkeyup事件调用CutStr函数就可以实现对ID为elementID的最大字符串字节数的控制。 2只能输入数字(提供两种方法) (1)<asp:TextBox ID="txt_No1" runat="server" οnpaste="return false" style="ime-mode:disabled" οnkeypress="if((event.keyCode<48 ||event.keyCode>57) &&event.keyCode!=46) event.returnValue=false;"></asp:TextBox> 或者下面这种方法: (2)<asp:TextBox ID="txt_No1" runat="server" style="ime-mode: disabled;" οnkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"></asp:TextBox> 对于以上两种方法,建议使用第二种,因为第一种方法对第三方的键盘拼写工具不管用(例如搜狗输入法),第二种方法是检测用户输入的数据,如果不属于int类型,则替换掉。 3 检验是否输入的是身份证号: var vcity = { 11 : "北京", 12 : "天津", 13 : "河北", 14 : "山西", 15 : "内蒙古", 21 : "辽宁", 22 : "吉林", 23 : "黑龙江", 31 : "上海", 32 : "江苏", 33 : "浙江", 34 : "安徽", 35 : "福建", 36 : "江西", 37 : "山东", 41 : "河南", 42 : "湖北", 43 : "湖南", 44 : "广东", 45 : "广西", 46 : "海南", 50 : "重庆", 51 : "四川", 52 : "贵州", 53 : "云南", 54 : "西藏", 61 : "陕西", 62 : "甘肃", 63 : "青海", 64 : "宁夏", 65 : "新疆", 71 : "台湾", 81 : "香港", 82 : "澳门", 91 : "国外" }; checktheform = function(cardid) { //var card = document.getElementById(cardid).value; var card = cardid; //是否为空 if (card === '') { //alert('请输入身份证号,身份证号不能为空'); //document.getElementById(cardid).focus; return false; } //校验长度,类型 if (isCardNo(card) === false) { //alert('您输入的身份证号码不正确,请重新输入'); //document.getElementById(cardid).focus; return false; } //检查省份 if (checkProvince(card) === false) { //alert('您输入的身份证号码不正确,请重新输入'); //document.getElementById(cardid).focus; return false; } //校验生日 if (checkBirthday(card) === false) { //alert('您输入的身份证号码生日不正确,请重新输入'); //document.getElementById(cardid).focus(); return false; } //检验位的检测 if (checkParity(card) === false) { //alert('您的身份证校验位不正确,请重新输入'); //document.getElementById(cardid).focus(); return false; } return true; }; //检查号码是否符合规范,包括长度,类型 isCardNo = function(card) { //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/; if (reg.test(card) === false) { return false; } return true; }; //取身份证前两位,校验省份 checkProvince = function(card) { var province = card.substr(0, 2); if (vcity[province] == undefined) { return false; } return true; }; //检查生日是否正确 checkBirthday = function(card) { var len = card.length; //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字 if (len == '15') { var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/; var arr_data = card.match(re_fifteen); var year = arr_data[2]; var month = arr_data[3]; var day = arr_data[4]; var birthday = new Date('19' + year + '/' + month + '/' + day); return verifyBirthday('19' + year, month, day, birthday); } //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X if (len == '18') { var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/; var arr_data = card.match(re_eighteen); var year = arr_data[2]; var month = arr_data[3]; var day = arr_data[4]; var birthday = new Date(year + '/' + month + '/' + day); return verifyBirthday(year, month, day, birthday); } return false; }; //校验日期 verifyBirthday = function(year, month, day, birthday) { var now = new Date(); var now_year = now.getFullYear(); //年月日是否合理 if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) { //判断年份的范围(3岁到100岁之间) var time = now_year - year; if (time >= 3 && time <= 100) { return true; } return false; } return false; }; //校验位的检测 checkParity = function(card) { //15位转18位 card = changeFivteenToEighteen(card); var len = card.length; if (len == '18') { var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); var cardTemp = 0, i, valnum; for (i = 0; i < 17; i++) { cardTemp += card.substr(i, 1) * arrInt[i]; } valnum = arrCh[cardTemp % 11]; if (valnum == card.substr(17, 1)) { return true; } return false; } return false; }; //15位转18位身份证号 changeFivteenToEighteen = function(card) { if (card.length == '15') { var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); var cardTemp = 0, i; card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6); for (i = 0; i < 17; i++) { cardTemp += card.substr(i, 1) * arrInt[i]; } card += arrCh[cardTemp % 11]; return card; } return card; };