MVVM架构~knockoutjs系列之为validation.js扩展minLength和maxLength

简介:

为什么要对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: "名字太长了" },
     });

看一下运行的结果

本文转自博客园张占岭(仓储大叔)的博客,原文链接:MVVM架构~knockoutjs系列之为validation.js扩展minLength和maxLength,如需转载请自行联系原博主。

目录
相关文章
|
1月前
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
52 4
|
1月前
|
存储 前端开发 Java
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
27 2
|
24天前
|
机器学习/深度学习 JavaScript Cloud Native
Node.js作为一种快速、可扩展的服务器端运行时环境
Node.js作为一种快速、可扩展的服务器端运行时环境
35 8
|
27天前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
47 3
|
6天前
|
前端开发 JavaScript 应用服务中间件
Nginx 支持 JavaScript:前所未有的扩展
Nginx 是全球领先的高性能 Web 服务器,以其高效的反向代理和负载均衡功能著称。近期,Nginx 正式支持 JavaScript(通过 NJS 模块),基于 V8 引擎,允许在配置中嵌入 JS 代码,极大提升了灵活性和扩展性。开发者可以使用 JavaScript 实现动态请求处理、自定义认证、复杂响应处理、中间件编写及流量控制等功能,显著降低开发和维护难度,同时保持高性能。NJS 模块的引入为 Nginx 带来了前所未有的扩展能力,适应快速变化的业务需求。
15 0
|
1月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
38 2
|
1月前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
1月前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计
|
28天前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计
|
1月前
|
监控 测试技术 持续交付
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
52 0