textbox框的常见验证


   对于一个系统,用户可以输入数据即代表着不安全,尤其在用户是网络上的任意人的时候,我们没有办法假定用户按照我们的要求去输入数据,也没有办法假定用户的所有输入都是善意的,在这种情况下,验证用户的输入数据就变得十分重要。以下举几种常见的验证(以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 检验是否输入的是身份证号:

  1. var vcity = {
  2.     11 : "北京",
  3.     12 : "天津",
  4.     13 : "河北",
  5.     14 : "山西",
  6.     15 : "内蒙古",
  7.     21 : "辽宁",
  8.     22 : "吉林",
  9.     23 : "黑龙江",
  10.     31 : "上海",
  11.     32 : "江苏",
  12.     33 : "浙江",
  13.     34 : "安徽",
  14.     35 : "福建",
  15.     36 : "江西",
  16.     37 : "山东",
  17.     41 : "河南",
  18.     42 : "湖北",
  19.     43 : "湖南",
  20.     44 : "广东",
  21.     45 : "广西",
  22.     46 : "海南",
  23.     50 : "重庆",
  24.     51 : "四川",
  25.     52 : "贵州",
  26.     53 : "云南",
  27.     54 : "西藏",
  28.     61 : "陕西",
  29.     62 : "甘肃",
  30.     63 : "青海",
  31.     64 : "宁夏",
  32.     65 : "新疆",
  33.     71 : "台湾",
  34.     81 : "香港",
  35.     82 : "澳门",
  36.     91 : "国外"
  37. };

  38. checktheform = function(cardid) {

  39.     //var card = document.getElementById(cardid).value;
  40.     var card = cardid;
  41.     //是否为空
  42.     if (card === '') {
  43.         //alert('请输入身份证号,身份证号不能为空');
  44.         //document.getElementById(cardid).focus;
  45.         return false;
  46.     }
  47.     //校验长度,类型
  48.     if (isCardNo(card) === false) {
  49.         //alert('您输入的身份证号码不正确,请重新输入');
  50.         //document.getElementById(cardid).focus;
  51.         return false;
  52.     }
  53.     //检查省份
  54.     if (checkProvince(card) === false) {
  55.         //alert('您输入的身份证号码不正确,请重新输入');
  56.         //document.getElementById(cardid).focus;
  57.         return false;
  58.     }
  59.     //校验生日
  60.     if (checkBirthday(card) === false) {
  61.         //alert('您输入的身份证号码生日不正确,请重新输入');
  62.         //document.getElementById(cardid).focus();
  63.         return false;
  64.     }
  65.     //检验位的检测
  66.     if (checkParity(card) === false) {
  67.         //alert('您的身份证校验位不正确,请重新输入');
  68.         //document.getElementById(cardid).focus();
  69.         return false;
  70.     }
  71.     return true;
  72. };

  73. //检查号码是否符合规范,包括长度,类型
  74. isCardNo = function(card) {
  75.     //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
  76.     var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
  77.     if (reg.test(card) === false) {
  78.         return false;
  79.     }

  80.     return true;
  81. };

  82. //取身份证前两位,校验省份
  83. checkProvince = function(card) {
  84.     var province = card.substr(0, 2);
  85.     if (vcity[province] == undefined) {
  86.         return false;
  87.     }
  88.     return true;
  89. };

  90. //检查生日是否正确
  91. checkBirthday = function(card) {
  92.     var len = card.length;
  93.     //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
  94.     if (len == '15') {
  95.         var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
  96.         var arr_data = card.match(re_fifteen);
  97.         var year = arr_data[2];
  98.         var month = arr_data[3];
  99.         var day = arr_data[4];
  100.         var birthday = new Date('19' + year + '/' + month + '/' + day);
  101.         return verifyBirthday('19' + year, month, day, birthday);
  102.     }
  103.     //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
  104.     if (len == '18') {
  105.         var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
  106.         var arr_data = card.match(re_eighteen);
  107.         var year = arr_data[2];
  108.         var month = arr_data[3];
  109.         var day = arr_data[4];
  110.         var birthday = new Date(year + '/' + month + '/' + day);
  111.         return verifyBirthday(year, month, day, birthday);
  112.     }
  113.     return false;
  114. };

  115. //校验日期
  116. verifyBirthday = function(year, month, day, birthday) {
  117.     var now = new Date();
  118.     var now_year = now.getFullYear();
  119.     //年月日是否合理
  120.     if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month
  121.             && birthday.getDate() == day) {
  122.         //判断年份的范围(3岁到100岁之间)
  123.         var time = now_year - year;
  124.         if (time >= 3 && time <= 100) {
  125.             return true;
  126.         }
  127.         return false;
  128.     }
  129.     return false;
  130. };

  131. //校验位的检测
  132. checkParity = function(card) {
  133.     //15位转18位
  134.     card = changeFivteenToEighteen(card);
  135.     var len = card.length;
  136.     if (len == '18') {
  137.         var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8,
  138.                 4, 2);
  139.         var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3',
  140.                 '2');
  141.         var cardTemp = 0, i, valnum;
  142.         for (= 0; i < 17; i++) {
  143.             cardTemp += card.substr(i, 1) * arrInt[i];
  144.         }
  145.         valnum = arrCh[cardTemp % 11];
  146.         if (valnum == card.substr(17, 1)) {
  147.             return true;
  148.         }
  149.         return false;
  150.     }
  151.     return false;
  152. };

  153. //15位转18位身份证号
  154. changeFivteenToEighteen = function(card) {
  155.     if (card.length == '15') {
  156.         var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8,
  157.                 4, 2);
  158.         var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3',
  159.                 '2');
  160.         var cardTemp = 0, i;
  161.         card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
  162.         for (= 0; i < 17; i++) {
  163.             cardTemp += card.substr(i, 1) * arrInt[i];
  164.         }
  165.         card += arrCh[cardTemp % 11];
  166.         return card;
  167.     }
  168.     return card;
  169. };

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值