一个简洁的通用前端输入数据校验方法

每个项目都会有对输入数据做一些简单校验的事情,比如特殊字符过滤、最大最小长度,数字、邮箱等格式验证等等。

这些验证往往在一个项目的很多表单里都有大量重复工作,因此很多前端框架都设计一套通用验证方法,来降低这个重复劳动。

但这些使用框架自带的验证方法,都需要额外增加一些文件的引用,我很烦恼这些,因为我是一个极简主义者。

因此,下面这个简单的通用校验设想就出台了:

// 通用输入校验方法,简洁明了,方便拓展修改
function vivaValid(obj) {
    var r   = '',
        o   = $(obj),
        v   = o.val(),
        typ = o.get(0).tagName.toLowerCase(),     //输入框类型input、textarea、select、checkbox、radio等
        reg = o.attr('vali_reg'),   //校验用正则表达式
        msg = o.attr('vali_msg'),   //校验结果通知消息
        max = o.attr('maxlength'),  //最大长度限制
        min = o.attr('minlength'),  //最小长度限制
        mth = o.attr('vali_match'), //匹配项的编号
        btn = o.attr('lock_btn'),   //需禁用的按钮编号(逗号分隔)
        lks = o.attr('lock_self'),  //验证不过时,是否焦点锁定自己
        rqr = o.is(':required');    //是否必填
    $('.warn-msg').remove();
    var r = (rqr && typ == 'input'    && o.attr('type') == 'text' && !v) ? 'This can not be empty'
          : (rqr && typ == 'input'    && o.attr('type') == 'checkbox' && !o.is(':checked')) ? 'Please checked it to continue'
          : (rqr && typ == 'textarea' && !v) ? 'This can not be empty'
          : (rqr && typ == 'select'   && !v) ? 'This must select one to continue'
          : (min != undefined && v && v.length < parseInt(min, 10)) ? ('This length must be long than ' + min)
          : (max != undefined && v && v.length > parseInt(max, 10)) ? ('This length must be less than ' + max)
          : (reg != undefined && msg != undefined && v && !(new RegExp(reg, 'g')).test(v)) ? msg
          : (mth != undefined && msg != undefined && v && v != $('#' + mth).val()) ? msg
          : '';
    if (r) { //校验不通过
        $('<p class="help-block warn-msg">' + r + '</p>').insertAfter(o); //显示提示消息,这里样式自己灵活设定
        (lks == undefined || lks) && o.focus(); //默认锁定,只有指定并且值为true,才焦点锁定自己
    }       
    if (btn != undefined) { //指定了禁用按钮
        var btns = btn.split(','); //用逗号分割指定的多个按钮编号
        for (var i = 0; i < btns.length; i++) {
            //根据验证结果,逐个禁用或解禁指定的提交按钮
            r ? $('#' + btns[i]).attr('disabled', 'disabled') : $('#' + btns[i]).removeAttr('disabled'); 
        }
    }
}



下面是调用示例:

<ul>
    <li>
        <input lock_btn="btnSave" οnblur="vivaValid(this);"  type="text"     id="txtAccount"         required placeholder="User Name" minlength="4" maxlength="20" vali_reg="^[A-Za-z0-9_]*$" vali_msg="Must be 'A to 'Z', 'a' to 'z', '0' to '9' and '_'" value="@Model.Account"/>
    </li>
    <li>
        <input lock_btn="btnSave" οnblur="vivaValid(this);"  type="password" id="txtPassword"        required placeholder="Password"  minlength="6" maxlength="12"/>
    </li>
    <li>
        <input lock_btn="btnSave" οnblur="vivaValid(this);"  type="password" id="txtConfirmPassword" required placeholder="Confirm Password" vali_match="txtPassword" vali_msg="Must match password entered above" />
    </li>
    <li>
        <button οnclick="save();" id="btnSave">NEXT</button>
    </li>
</ul>



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值