刚做的项目中有个姓名的正则规则,在网上查了下 也没有类似的正则,自己正则也很菜,同事一大神就写了这套正则,特此记下来学习一下。
首先说一下校验的需求吧
1)字母与符号的组合,符号仅允许下列符号“•”或“_” 或“-”或空格(“_” 或“-”或空格仅允许半角模式)。若姓名中有符号“.”、“。”、“.”、“,”、“、”时(含半角、全角及各语种),将其转换为“•”
2)“•”或“_”或“-”只能出现在两个汉字或两个字母之间,两个汉字或两个字母之间只允许有1个符号,若有多个符号只保留第1个。
3)汉字之间需去除空格;英文名只保留字母中间的连续空格的第一个空格,其他空格都去除;汉字与符号之间,字母与符号之间不允许有空格,需去除。
大概也就这样的一个正则吧,下面直接放代码
// _name是接受姓名字符串的变量
// 连续多个特殊字符保留一个, 特殊字符两边去除空格
_name = _name.replace(/\s*([·_-])[\s·_-]*/ig, '$1');
// 英文只能连续一个空格 // 中文去掉全部空格
_name = _name.replace(/\s+/ig, /[a-zA-Z]/.test(_name) ? ' ' : '');
// 移除首尾空格
_name = _name.trim();
// 判断是否存在非·字符
/[\.、。\.,,]{1,}/.test(_name)
//非·的符号转化为·
_name = _name.replace(/[\.、。\.,,]{1,}/g, '·');