前端对中文姓名的校检
2024-09-18 本文已影响0人
小遁哥
这里的中文指的是身份证上人的姓名。
一开始的表达式是这样的
/^[\u4e00-\u9fa5]{2,15}$/
但是有一个叫 李𠇔 的人,我想着那就是字符集范围不够大,而且还要支持"·.",于是改成下面这样
/^[\u4e00-\u9fff·.]{2,15}$/
还是不行,而且𠇔这个字'𠇔'.length
是 2,普通的汉字都是 1,于是就改成了下面这种
let replaceResultStr = val.replace(/\p{sc=Han}/gu, '')
replaceResultStr = replaceResultStr.replace(/[·.]/g, '')
if (replaceResultStr) {
return false
}
let valArr = Array.from(val)
if (valArr.length < 2 || val.length > 15) {
return false
}
"\p"和"u"是需要同时出现的,表示匹配某种属性的字符,u 表示 unicode 编码
Array.from(val)
可以解决字符长度判断的问题