博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVVM架构~knockoutjs系列之为validation.js扩展minLength和maxLength
阅读量:6567 次
发布时间:2019-06-24

本文共 2369 字,大约阅读时间需要 7 分钟。

为什么要对minLength和maxLength这两个方法进行扩展呢,是因为这样一个需求,在用户注册时,可以由用户自己决定他们输入的字符,中文,英文,数字均可,这样做了之后,使用户的体验更好,但对于程序来说就有些麻烦了,因为

我们的Length方法只针对英文字符和数字而言的

原因1:事实上,真实的数据存储里,中文和全角他们占用的是两个字符的空间,所以,我们在验证中文时,应该考虑到这点.

原因2:不说计算机基础知识,但说现实世界里,如果你的用户名由4~10位组成,那么,如果你用Length方法,那基本上对中文的名称被90%的拒绝了,因为只有小部分中国文会起四个字的名字,呵呵.

说干就干:

从网站上搜索了一下,找到了一个不错的JS方法,用来验证中文和英文字母的长度,原代码

/**    * 字符串长度-中文和全角符号为2,英文、数字和半角为1    * @param str    * @return {Number}    */    var getLength = function (str) {        return Math.ceil(str.replace(/^\s+|\s+$/ig, '').replace(/[^\x00-\xff]/ig, 'xx').length);    };    /**    * 按字数截取字符串    * @param str    * @param len    * @return {*}    */    var subStr = function (str, len) {        if (!str) {            return '';        }        len = len > 0 ? len * 2 : 280;        var count = 0, //计数:中文2字节,英文1字节            temp = '';  //临时字符串        for (var i = 0; i < str.length; i++) {            if (str.charCodeAt(i) > 255) {                count += 2;            }            else {                count++;            }            //如果增加计数后长度大于限定长度,就直接返回临时字符串            if (count > len) {                return temp;            }            //将当前内容加到临时字符串            temp += str.charAt(i);        }        return str;    };    var checkStrLength = function (str, minL, maxL) {        var len = getLength($.trim(str));        var data = {            'checkL': (len >= minL && len <= maxL),            'restL': maxL - len,            'restStr': subStr(str, maxL)        };        return data;    };

我们将它与ko.validation架构进行结合,但它在ko中去呈现

/*扩展的字符长度验证,支持中文占两个字符的空间*/    kv.rules['extMinLength'] = {        validator: function (val, minLength) {            if (!kv.utils.isEmptyVal(val)) {                console.log(getLength(val));                console.log(minLength);            }            return kv.utils.isEmptyVal(val) || getLength(val) >= minLength;        },        message: 'Please enter at least {0} characters.(extension validator for zzl)'    };    kv.rules['extMaxLength'] = {        validator: function (val, maxLength) {            return kv.utils.isEmptyVal(val) || getLength(val) <= maxLength;        },        message: 'Please enter no more than {0} characters.(extension validator for zzl)'    };

下面我们看一下如何去调用它

self.extName = ko.observable().extend({                extMinLength: 4,                extMaxLength: { params: 20, message: "名字太长了" },     });

看一下运行的结果

转载地址:http://akpjo.baihongyu.com/

你可能感兴趣的文章
Android-环境问题
查看>>
Android- assent和raw的区别
查看>>
Vue-系统修饰键
查看>>
1264: [AHOI2006]基因匹配Match
查看>>
Java 重写(Override)与重载(Overload)
查看>>
Javascript调试技巧整理
查看>>
Python学习笔记 - PostgreSQL的使用
查看>>
Linux常用命令
查看>>
turtle练习
查看>>
Oracle Golden Gate 系列 小结
查看>>
Oracle DBMS_STATS 包 和 Analyze 命令的区别
查看>>
【CTS】几个serialno失败项
查看>>
使用Lucene.Net实现全文检索
查看>>
多线程使用场景
查看>>
keras简单介绍与使用
查看>>
UBI系统原理-中【转】
查看>>
继电器是如何成为CPU的(1)【转】
查看>>
多表一对一左关联
查看>>
关于node.js的进程管理
查看>>
tinymce4.x 上传本地图片(自己写个插件)
查看>>