限制连续相同字符出现 实现合法姓名输入校验
姓名连续重复字符校验实现方案
核心校验规则为:检测输入的姓名中是否存在连续3次及以上的相同字符,如果存在则判定为非法姓名不予接收,可根据实际业务需求调整连续重复的次数阈值。
实现思路
两种通用实现方式可按需选择:
- 正则匹配:代码最简洁,性能满足绝大多数场景的校验需求
- 遍历字符串统计:适合需要叠加其他自定义校验规则、不希望依赖正则的场景
正则规则说明
匹配连续n次及以上相同字符的正则为(.)\1{n-1,},以最常用的连续3次判定非法为例,对应正则为(.)\1{2,}:
.匹配任意单个字符,包括中文、英文字母等\1反向引用第一个捕获组匹配到的字符{2,}代表前面的\1再匹配至少2次,即同一个字符总共连续出现至少3次
各语言实现示例
JavaScript 前端校验
function isValidName(name) { // 连续3次相同字符判定为非法 const invalidPattern = /(.)\1{2,}/; // 可叠加非空、长度校验等其他规则 if (!name.trim() || name.length > 50) return false; return !invalidPattern.test(name); } // 测试用例 console.log(isValidName("daaaaa")); // 输出 false console.log(isValidName("david")); // 输出 true console.log(isValidName("李一一一")); // 输出 false
Python 后端校验
import re def is_valid_name(name: str) -> bool: invalid_pattern = r'(.)\1{2,}' # 可叠加长度、特殊字符校验等其他规则 if not name.strip() or len(name) > 50: return False return not re.search(invalid_pattern, name) # 测试用例 print(is_valid_name("daaaaa")) # 输出 False print(is_valid_name("张三")) # 输出 True
Java 后端校验
import java.util.regex.Pattern; public class NameValidator { private static final Pattern INVALID_NAME_PATTERN = Pattern.compile("(.)\\1{2,}"); public static boolean isValidName(String name) { // 可叠加非空、长度、特殊字符校验等其他规则 if (name == null || name.trim().isEmpty() || name.length() > 50) { return false; } return !INVALID_NAME_PATTERN.matcher(name).find(); } public static void main(String[] args) { System.out.println(isValidName("daaaaa")); // 输出 false System.out.println(isValidName("John")); // 输出 true } }
内容的提问来源于stack exchange,提问作者john david
相关产品推荐
相关产品推荐

