注册用户名字符长度判断细节

简介: $username = '刷_单8元1单淘宝客服20元1小时_我Q125556733jff';        var_dump(strlen($username));        var_dump(Library\Common::username_patten($username));   一、使用strlen来判断长度   里面的一个汉字会认为长度是3个字符(utf-8编码情况下一个汉字3个字符,gbk编码就是2个字符长度) 例子:  $username = '刷_单8元';  var_dump(strlen($username));   长度是11。

        $username = '刷_单8元1单淘宝客服20元1小时_我Q125556733jff';
        var_dump(strlen($username));
        var_dump(Library\Common::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){
    
    
}

 

目录
相关文章
|
2月前
|
算法 前端开发
根据模式串构造最小数字
根据模式串构造最小数字
19 0
|
3月前
|
存储 测试技术
数字看做字符串的处理方法
数字看做字符串的处理方法
19 0
|
8月前
|
运维 Shell Python
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(一)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)
89 0
|
4月前
|
JavaScript 前端开发 物联网
正则表达式的用法(判断是否为手机号格式)
正则表达式的用法(判断是否为手机号格式)
267 1
|
8月前
|
运维 Shell Perl
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
92 0
|
9月前
整数值比较判断登录系统用户
整数值比较判断登录系统用户
32 0
|
9月前
如何用正则表达式判断手机号格式正不正确
如何用正则表达式判断手机号格式正不正确
100 0
有一个长度是10的数组,数组内有10个人名,要求去掉重复的人名,并输出
有一个长度是10的数组,数组内有10个人名,要求去掉重复的人名,并输出
226 0
|
数据安全/隐私保护
根据ASCII值的数字和与某一数字的大小关系,判断是否成功输入密码
根据ASCII值的数字和与某一数字的大小关系,判断是否成功输入密码
55 0
根据ASCII值的数字和与某一数字的大小关系,判断是否成功输入密码
|
PHP
PHP面试题:对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则 表达式验证,对于不符合要求的$string返回出错信息
PHP面试题:对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则 表达式验证,对于不符合要求的$string返回出错信息
121 0