zoukankan      html  css  js  c++  java
  • 注册用户名字符长度判断细节

            $username = '刷_单8元1单淘宝客服20元1小时_我Q125556733jff';
            var_dump(strlen($username));
            var_dump(LibraryCommon::username_patten($username));

    一、使用strlen来判断长度

    里面的一个汉字会认为长度是3个字符(utf-8编码情况下一个汉字3个字符,gbk编码就是2个字符长度)

    例子:

     $username = '刷_单8元';
      var_dump(strlen($username));

    长度是11。

    刷,单,元  3*3=9

    "_“和"8", 总共是2个长度

    9+2=11

    具体做试验:

    $username = '刷';

    var_dump(strlen($username));//得到是长度值是3

    二、使用正则匹配

             $username_patten = '/^[a-zA-Z0-9_x{4e00}-x{9fa5}]{3,30}$/u'; //字母、数字、下划线、中文,汉字或字符加起来30个即可
            //注:x{4e00}-x{9fa5}作为汉字的范围判断只适合utf-8编码情况下,gb2312不适合目前我们的项目统一使用utf8项目。

            if (preg_match($username_patten, $username)){

            }

    特点:正则中会把一个汉字当成一个长度来计算。因为x{4e00}已经指定了汉字编码

    解释不是非常科学。记住这个细节的差异就可以了。

    javascript的验证长度研究

    /*
     * +---------------------------------
     * 验证指定的字符长度,用来做标题长度验证
     * +---------------------------------
     */
    function getStrLeng(str){
        
        var len = str.length;//js内部使用的是utf16编码,如果是中文,一个汉字也算一个长度。所以返回的是字符长度,而不是字节大小
        return len;
        
    }
    var len = getStrLeng("我们_j");//在js中,一个中文汉str.length字也是一个长度,
    /*
     JavaScript中的String内部表示方式始终是UTF16,而它的length也是始终按UTF16 code point去计算,简而言之,length始终返回字符数量,而非字节大小!
     为什么有人测试发现对于同一个字符串"张三",用UTF8编码时返回2,用GBK则得到3呢?那是因为浏览器没能正确识别文件编码,所以判断错了,返回3的结果是一个程序运行出错的结果。
     参考:
     http://segmentfault.com/q/1010000000445715
     因为使用的是utf-16,所以这个编码表里面能够找到所有的汉字,这样情况下,就能够当成一个字符了?
     反正它返回的不是实际的字节长度,而是多少个字符。
     
     http://www.puritys.me/docs-blog/article-107-String-Length-%E4%B8%AD%E6%96%87%E5%AD%97%E4%B8%B2%E9%95%B7%E5%BA%A6.html
     
     使用 string.length 來計算長度時,中文字串會被當成是一個字來計算,因為 Javascript 是使用 multiple byte 計算,就像是 php 的 mb_strlen。
     不管是中文,英文,都當成一個字來算,所以總共是 6 個字,不過有時候我們並不想把中文字當成一個字來計算,因為中文字明明佔的 byte 數就是比較多,所以來看一下中文編碼吧。
    */


    alert(len);



    /*
     * +---------------------------------
     * 验证指定的字符长度,用来做标题长度验证
     * 这个函数验证是按照字节长度算,所以中文汉字在utf-8编码中是算3个字节
     * +---------------------------------
     */
    function getStrLengByBytle(str){
        
        
    }

  • 相关阅读:
    20145312 《信息安全系统设计基础》实验三 实时系统的移植(修改版)
    20145312《信息安全系统设计基础》课程总结
    《信息安全系统设计基础》实验三 《实时系统的移植》 问题总结
    《信息安全系统设计基础》实验五 《网络通信》 问题总结

    20145309 《网络对抗技术》信息搜集与漏洞扫描
    20145309李昊《网络对抗》MSF应用基础
    20145309 《网络攻防》恶意代码分析
    20145309《网络对抗技术》免杀原理与实践
    20145309 李昊 《网络攻防》 Exp2 后门原理与实践
  • 原文地址:https://www.cnblogs.com/wangtao_20/p/4511305.html
Copyright © 2011-2022 走看看