校验姓名包含生僻字的js写法,正则表达式无法解决的一些校验。

案例1:一般的正则表达式的校验unicode编码范围有:4E00-9FA5,用这个来校验,但是这个只能校验基本的汉字,但对于生僻字的校验是不通过的。

在做项目对的时候用到校验的姓名的,我使用了4E00-9FA5这个范围进行校验,基本的汉字是可以校验通过的,但是遇到一些生僻字就校验不通过。
查找了很多关于unicode编码的资料,了解了中文的范围有好多种。

𪜞𪜟这个生僻字使用上面的unicode编码校验是不通过的,因为它们不在那个范围,它们在的unicode范围:2A700-2B734,但js只能识别2字节的编码,这个超过了2个字节,直接使用这个范围做正则校验是不通过的,

长话短说,我直接将我查资料的网站丢在这,大家自行学习。

汉字unicode编码:https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php

四字节的unicode编码:http://www.ruanyifeng.com/blog/2014/12/unicode.html

这是校验汉字包含生僻字的js函数。

function utf8ToUtf16(h, l) {
    var sum  =   ((h  - 0xD800) * 0x400  +   (l - 0xDC00))  +  0x10000;
    return sum;
};
function checkCode(val, maxLen)  {
    var len  =  val.length; 
    var lenRel  =  len; 
    var i  =  0;
    while (i < len) {
        var h  =  val.charCodeAt(i); i++;
        if  ((h  >=  0x3400  &&  h  <=  0x4DB5)  ||   (h  >=  0x4E00  &&  h  <= 0x9FA5) || (h >= 0xF900 && h <= 0xFAD9) || (h >= 0x2F00 && h <= 0x2FD5) || (h  >=  0x3400  &&  h  <=  0x4DB5))  {} 
        else  
        if  (h  >=  0xD800  && h <= 0xDBFF) { 
            var l  =  val.charCodeAt(i); i++;
            lenRel--;
            var utf16  =  utf8ToUtf16(h, l);
            if (! (utf16  >=  0x20000  &&  utf16 <= 0x2A6D6) && !(utf16  >=  0x2A700  &&  utf16 <= 0x2B734) && !(utf16  >=  0x2B740  &&  utf16 <= 0x2B81D) && !(utf16  >=  0x2F800  &&  utf16 <= 0x2FA1D) && !(utf16  >=  0x30000  &&  utf16 <= 0x3134A) && !(utf16  >=  0x2B820  &&  utf16 <= 0x2CEA1) && !(utf16  >=  0x2CEB0  &&  utf16 <= 0x2EBE0)) { 
                return false;
            }
        } else {
            return false;
        }
    }
    return lenRel >= maxLen;
};
checkCode(arg2, 2)

1、checkCode(“姓名”,2);校验姓名是否是汉字。该方法返回true,
2、checkCode(“1223”,2),返回false,表示不是汉字,
3、checkCode函数的第二参数2是表示校验的arg2的长度,姓名要满足2位 及2位以上。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值