1.常见的中文 \u4e00-\u9fbb 和 \u4e00-\u9fa5 (不包含生僻字)
2.比较广泛的中文汉字。(包含了咱们需要的生僻字 和 不需要的很多字符 比如 中文句号分号逗号、书名号 等等) \u2E80-\uFE4F
3.CJK标点符号
范围:\u3000-\u303F
参考地址:http://www.unicode.org/charts/PDF/U3000.pdf
根据以上三点,我们要用第二个再排除第三个,所以判断是否包含生僻字的中文姓名的正则表达式如下所示:
/^((?![\u3000-\u303F])[\u2E80-\uFE4F]|\·)(?![\u3000-\u303F])\u2E80-\uFE4F$/.test(name)
/^([\u2E80-\uFE4F]{2,6})$/gi.test('䶮一亿')
校验姓名
// 将传入的姓名中空格和全角空格都去掉,乱七八糟的·都换成半角的· export const checkChineseName = function(name) { let reg = /^[\u4e00-\u9fa5]{2,15}$/; // 保留点后,用来校验的姓名,也是最终校验通过后返回的姓名 let payerName = name.replaceAll(" ", "") .replaceAll(" ", "") .replaceAll("•", "·") .replaceAll(".", "·"); // 去除所有点后,用来校验的姓名 let checkName = name.replaceAll(" ", "") .replaceAll(" ", "") .replaceAll("•", "") .replaceAll(".", "") .replaceAll("·", ""); if(checkName.length === 1){ message.error("姓名至少包含两位汉字,请修正"); return false; } if (reg.test(checkName)) { if(payerName.substring(0,1) === '·'){ message.error("姓名第一位不能为【·】,请修正"); return false; } if(payerName.substring(payerName.length - 1) === '·'){ message.error("姓名最后不能为【·】,请修正"); return false; } if(payerName.indexOf("··") !== -1){ message.error("姓名不能有连续的【·】,请修正"); return false; } return payerName; } else { message.error("姓名中只能包含【汉字】和【·】,请修正"); return false; } }