在js中字符串使用unicode来表示的,并且js使用的是UTF-16(UTF-16是Unicode字符编码五层次模型的第三层)。
这样来说大部分字符都是16bit编码。
但是也有较少的部分是32bit,这是由于完整的unicode字符集是需要21bit来标识的。
1、匹配双字节字符:[^\x00-\xff]
正则表达式 [^\x00-\xff]能匹配双字节字符,下面方法用来获取字符串长度,规则为:单字节长度为1、汉字等双字节长度为2;
function getLength(str){
return str.replace(/[^\x00-\xff]/g, 'aa').length;//把所有非单字节的字符转换成2个单字符
}
二、匹配邮箱
[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
判断一个字符串str是否是邮箱格式
function isEmail(str){
var reg = /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/;
if (! reg.test(str)){
alert("输入的不是邮箱");
} else {
alert("输入的是邮箱格式");
}
三、匹配11位手机号码
模式为: reg = /\d{11}/;
function isPhoneNunmber(str){
var reg = /\d{11}/;
if ((str.length != 11) || (! reg.test(str))){
alert("输入的不是11位号码");
} else {
alert("输入的是11位号码");
}
}