javascript - js中这段正则是做什么判断
本文介绍了javascript - js中这段正则是做什么判断的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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
解决方案
这段代码是干嘛的
通过代码来看,这段代码的作用是检查名称的合法性,检查规则如下:
名字不能包含单引号
'
或双引号"
;名字长度在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
正则表达式匹配的就是汉字,以三个英文字符*
来替换一个汉字。
解释一下正则表达式呗?
通过上面的解释你应该知道这代码是干嘛的了。如果你还不了解正则的话,参考下面的链接。你要是看了下面的链接还看不懂上面的正则,你再告诉我。
更新记录:
根据@brook 的指正,应该是不能包含
'
和"
,而不是非'
或"
开头关于中文字符匹配,参考一下:匹配中文字符的正则表达式
这篇关于javascript - js中这段正则是做什么判断的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文