You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java姓名正则验证问题:特定合法姓名无法通过匹配求助

解决姓名正则匹配问题:兼容带弯引号和复合姓氏的合法姓名

我写了一段Java代码用于验证用户姓名,符合规则就进入后续循环,不符合则退出。目前多数姓名能正常处理,但O’Malley, John F. 和 John O’Malley-Smith 这两个合法姓名被判定为无效。当前使用的正则是String REGEX = ("^[\\-\\.\\'\\, a-zA-Z ]*$");,尝试过\b边界符但没用,求修改正则的方案,附带合法/非法姓名列表及原代码。

合法姓名列表

  • Bruce Schneier
  • Schneier, Bruce
  • Schneier, Bruce Wayne
  • O’Malley, John F.
  • John O’Malley-Smith
  • Cher

非法姓名列表

  • Ron O’’Henry(连续两个弯引号)
  • Ron O’Henry-Smith-Barnes(多个连续连字符)
  • L33t Hacker(含数字)
  • //alert(“XSS”)//(含特殊符号和脚本内容)
  • select * from users;(含SQL关键字和特殊符号)

修改后的正则方案

问题核心是原正则未包含Unicode弯引号(’),同时没有限制符号连续出现的情况。修改后的正则既能兼容合法姓名的特殊格式,又能过滤非法内容:

String REGEX = "^[a-zA-Z]+(?:[ ’\\-.,][a-zA-Z]+)*$";

正则解释

  • ^[a-zA-Z]+:姓名开头必须是至少一个英文字母,避免以符号开头
  • (?:[ ’\\-.,][a-zA-Z]+)*:允许后续出现零次或多次「符号+英文字母」组合,支持的符号包括空格、弯引号(’)、连字符(-)、点(.)、逗号(,)
  • $:匹配到字符串结尾,确保整个姓名完全符合规则

完整修改后的代码

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class InputAsker {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.print("Please Input Your Name: ");
        String myName = keyboard.nextLine();
        // 修改后的正则表达式
        String REGEX = "^[a-zA-Z]+(?:[ ’\\-.,][a-zA-Z]+)*$";
        Pattern pattern = Pattern.compile(REGEX);
        Matcher matcher = pattern.matcher(myName);
        boolean matchFound = false;
        
        // 改用matches()匹配整个字符串,避免部分匹配的误判
        if (matcher.matches()) {
            System.out.println("That's A Great Name! Let's Continue");
            matchFound = true;
            // 后续循环逻辑写在这里
        }
        
        if (!matchFound) {
            System.out.println("Sorry, Not A Valid Name! Please Try Again!");
        }
        
        keyboard.close(); // 关闭输入流,避免资源泄漏
    }
}

代码优化说明

  1. 把matcher.find()替换为matcher.matches(),确保整个姓名字符串完全匹配规则,避免部分字符匹配导致的误判
  2. 添加keyboard.close()关闭Scanner资源,符合Java资源管理规范
  3. 变量名matchfound改为matchFound,遵循Java驼峰命名规范

内容的提问来源于stack exchange,提问作者Amelia Beard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:10:24