zoukankan      html  css  js  c++  java
  • 一个JavaScript对象搞定用户表单输入验证

    封装的用于处理用户输入的数据的JavaScript对象。

    1、校验用户输入格式是否合法。

    2、转换用户输入的数字格式比如保留两个小数点。

    3、限制用户输入字数以及数值范围

    /**
     * 常用JavaScript数据验证
     *
     * @author xu 435861851@qq.com
     * @return
     */
    var VERIFICATION = {
        email: function(val){ return (/^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/).test(val); },
        imgcode: function(val){ return (/^[0-9a-zA-Z]{5}$/).test(val); },
        username: function(val){ return (/^(?![0-9]+$)[0-9A-Za-z_]{4,20}$/).test(val); },
        mobile: function(val){ return (/^1d{10}$/).test(val); },
        mobile_code: function(val){ return (/^d{6}$/).test(val); },
        is_int: function(val){return (/^[1-9]d*$/).test(val); },
        strlen:function(val){return $.trim(val).replace(/[^x00-xff]/g,"xx").length;},
        //强制保留小数点位数
        floatNum:function(num, count){
            var f = parseFloat(num);
            if (isNaN(f))  return false;
            var f = new Number(num).toFixed(count);
            var s = f.toString();
            var rs = s.indexOf('.');
            if (rs < 0) {
                rs = s.length;
                s += '.';
            }
            while (s.length <= rs + count) {
                s += '0';
            }
            return s;
        },
        check: function(){
            $('[check]').each(function(i1, e1){
                var anyCheck = $(e1).attr('check').split(' ');
                for(var i in anyCheck)
                {
                    var type = anyCheck[i].split(':');
                    switch(type[0])
                    {
                        //字符统计count:200
                        case 'count':
                            var maxCount = parseInt(type[1]);
                            $(e1).after('<span class="check-count"><span>'+VERIFICATION.strlen($(this).val())+'</span>/'+maxCount+'</span>');
                            $(e1).keyup(function(){
                                var len = VERIFICATION.strlen($(this).val());
                                $(this).nextAll('.check-count').eq(0).find('span').html(len);
                                if(len > maxCount)
                                    $(this).nextAll('.check-count').eq(0).find('span').addClass('red');
                                else
                                    $(this).nextAll('.check-count').eq(0).find('span').removeClass('red');
                            }).blur(function(){
                                $(this).val(STRING.subString($(this).val(), maxCount));
                                $(this).nextAll('.check-count').eq(0).find('span').removeClass('red').html(VERIFICATION.strlen($(this).val()));
                            });
                        break;
                        //price:0.01:9999.99[最大值可选]
                        case 'price':
                            var min = parseFloat(type[1]);
                            $(e1).keyup(function(){
                                var val= $(this).val().replace(/[^d.]/g,"").replace(/^./g,"").replace(/.{2,}/g,".").replace(".","$#$").replace(/./g,"").replace("$#$",".");
                                $(this).val(val);
                            }).blur(function(){
                                var val= $(this).val().replace(/[^d.]/g,"").replace(/^./g,"").replace(/.{2,}/g,".").replace(".","$#$").replace(/./g,"").replace("$#$",".");
                                if(!(/^d+(.d+)?$/).test(val) || val < min){
                                    val = min;
                                }else if(type.length == 3){
                                    var max = parseFloat(type[2]);
                                    if(val > max) val = max;
                                }
                                $(this).val(VERIFICATION.floatNum(val, 2));
                            });
                        break;
                        //number:1:99[最大值可选]
                        case 'number':
                            $(e1).keyup(function(){
                                var min = parseInt(type[1]);
                                var val = $(this).val().replace(/D|^0/g,'');
                                if (!(/^d+$/).test(val) || val < min){
                                    val = min;
                                }else if(type.length == 3){
                                    var max = parseInt(type[2]);
                                    if(val > max) val = max;
                                }
                                $(this).val(val);
                            });
                        break;
                        //浮点数float:1:8.5:99.2[最大值可选]
                        case 'float':
                            $(e1).keyup(function(){
                                var val= $(this).val().replace(/[^d.]/g,"").replace(/^./g,"").replace(/.{2,}/g,".").replace(".","$#$").replace(/./g,"").replace("$#$",".");
                                $(this).val(val);
                            }).blur(function(){
                                var len = parseInt(type[1]);
                                var min = parseFloat(type[2]);
                                var val= $(this).val().replace(/[^d.]/g,"").replace(/^./g,"").replace(/.{2,}/g,".").replace(".","$#$").replace(/./g,"").replace("$#$",".");
                                if(!(/^d+(.d+)?$/).test(val) || val < min){
                                    val = min;
                                }else if(type.length == 4){
                                    var max = parseFloat(type[3]);
                                    if(val > max) val = max;
                                }
                                if(len > 0)
                                    $(this).val(VERIFICATION.floatNum(val, len));
                                else
                                    $(this).val(val);
                            });
                        break;
                    }
                }
            });
        }
    };

    如何使用:

    这里提醒一下 VERIFICATION . check ( )的使用:

    $(function() {
        //初始化
        VERIFICATION.check();
    });
    <textarea class="form-control" rows="5" check="count:200" placeholder="最多允许输入100个汉字(200字符)" ></textarea>

    效果图(样式要自己处理一下哦,主要是对那个数字输入提示  .check-count 进行处理):

     

    所以,为了减少用户错误输入格式错误字符导致的前后端交互,直接JavaScript将数据格式转换即可:

    /**
      * @method 更改会员等级折扣率
      * @author xu 2017/8/29
      */
    function changeMemCardDisCount(memId,e)
    {
        var memDiscount = VERIFICATION.floatNum($(e).val(),2);
        if( 0.01 > memDiscount || memDiscount > 10)
        {
            // 非法数字
            $(e).val($(e).attr('data-pre'));
            return false;
        }
        $(e).val(memDiscount);
        $.post('/seller/saveData',{'memId':memId,'memDiscount':memDiscount,'isAjax':1},function(res){
            MESSAGE.fadeMsg(res);
        },'json');
    }

     javascript的number函数无法校验一个参数是否是数字,因为参数是 Date 对象时候,Number() 返回从 1970 年 1 月 1 日至今的毫秒数。 
    验证数字只能用isNaN验证

  • 相关阅读:
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 26 删除排序数组中的重复项
    Java实现 LeetCode 26 删除排序数组中的重复项
    Java实现 LeetCode 26 删除排序数组中的重复项
    Java实现 LeetCode 25 K个一组翻转链表
    Java实现 LeetCode 25 K个一组翻转链表
    Java实现 LeetCode 25 K个一组翻转链表
    Java实现 LeetCode 24 两两交换链表中的节点
    Java实现 LeetCode 24 两两交换链表中的节点
    Java实现 LeetCode 24 两两交换链表中的节点
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/7324381.html
Copyright © 2011-2022 走看看