js中这段正则是做什么判断
高洛峰
高洛峰 2016-11-10 15:26:35
0
2
745
var letterChineseReg = /^[^"']{1,48}$/;
function validateName(name, len) {
    if (len==48) {
        if (!letterChineseReg.exec(name)) {
            return false;
        }
    }
    strLen = name.replace(/[^\x00-\xff]/g, "***").length;  // non letter is the lenght of three chars
    if (strLen>len) {
        return false;
    }
    return true;
}

if (!validateName(rep_name, 48)) {
    showWarningMsg("名称不合法");
    return false;
}

这段正则是做什么判断

var letterChineseReg = /^[^"']{1,48}$/
name.replace(/[^\x00-\xff]/g, "***").length


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all(2)
学霸

补充一点

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符 (包括汉字在内):[^\x00-\xf


三叔

这段代码是干嘛的

通过代码来看,这段代码的作用是检查名称的合法性,检查规则如下:

名字不能包含单引号'或双引号";

名字长度在1到48个字符之间;即名字长度不能超过48个英文字符(准确来说是ASCII码),或16个汉字(一个汉字换算为3个英文字符);

那两条有正则的代码是干嘛的

第一条代码:

var letterChineseReg = /^[^"']{1,48}$/

这里定义了一个正则表达式变量。该正则表达式的含义即前面所说的两条名称检查规则:(1)不能包含单引号'或双引号";(2)字符个数在1-48个字符之间。

第二条代码:

name.replace(/[^\x00-\xff]/g, "***").length

这里利用正则表达式全局匹配(g)汉字并将每一个汉字替换为三个英文星号***,然后得到替换后的字符长度。

背景知识:

在任何编码中,1个英文字符(ASCII字符)所占的空间就是1个字节[byte,8个二进制位];

而汉字则不一样:汉字中gbk编码一个汉字所占的空间是2个字节,utf-8编码 一般 一个汉字所占的空间是3个字节;

所以,代码里是将一个汉字作为三个字符来换算的,其中/[^\x00-\xff]/g正则表达式匹配的就是汉字,以三个英文字符*来替换一个汉字。


Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!