前言:
在使用正则校验姓名的时候,会发现,很多生僻字根本校验不到。这里提供方法,经测试可用。
方法:methods:
utf8ToUtf16(h, l) {
var sum = ((h - 0xD800) * 0x400 + (l - 0xDC00)) + 0x10000
return sum
},
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 = this.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
},
调用:第一个参数是你的汉字,第二个是你要校验姓名的位数
mounted() {
let a1 = this.checkCode('张𪜟', 2)
let a2 = this.checkCode('张𪜞', 2)
let a3 = this.checkCode('张䶮', 2)
let a4 = this.checkCode('张馫', 2)
let a5 = this.checkCode('张骉', 2)
let a6 = this.checkCode('张尛', 2)
let a7 = this.checkCode('张111', 2)
let a8 = this.checkCode('张aaa', 2)
let a9 = this.checkCode('张,', 2)
debugger
},
效果:
