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

如何使用PatternSyntaxException及给定正则Pattern实现姓名合法性校验与异常处理

姓名合法性校验实现代码

首先导入所需依赖类:

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

你的预定义正则常量保持不变:

private static final String NAME_REGEX = "^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$";
private static final Pattern NAME_PATTERN = Pattern.compile(NAME_REGEX);

封装校验方法,加入try-catch逻辑:

public boolean validateName(String name) {
    // 前置空值校验,避免空指针异常
    if (name == null || name.trim().isEmpty()) {
        System.out.println("错误:姓名不可为空");
        return false;
    }
    try {
        // 执行正则匹配
        return NAME_PATTERN.matcher(name).matches();
    } catch (PatternSyntaxException e) {
        // 捕获正则语法异常,输出详细错误信息
        System.out.println("姓名校验正则语法错误:");
        System.out.printf("错误描述:%s%n", e.getDescription());
        System.out.printf("错误正则:%s%n", e.getPattern());
        System.out.printf("错误位置:第%d位%n", e.getIndex());
        return false;
    } catch (Exception e) {
        // 捕获其他未知异常
        System.out.printf("姓名校验出现未知错误:%s%n", e.getMessage());
        return false;
    }
}

PatternSyntaxException 正确使用说明

  • 触发条件:只有正则表达式本身存在语法错误时才会抛出该异常。你当前场景中NAME_PATTERN是静态常量,会在类加载阶段执行compile方法编译正则,如果正则语法有问题,类加载阶段就会抛出异常,不会等到执行matches时才触发。如果你的正则是运行时动态拼接生成的,需要在Pattern.compile阶段就捕获该异常。
  • 核心常用方法:
    • getDescription():返回正则语法错误的具体描述信息
    • getPattern():返回存在语法错误的完整正则表达式字符串
    • getIndex():返回语法错误在正则字符串中的索引位置,返回-1表示无法定位错误位置
    • getMessage():返回拼接了上述所有信息的完整错误日志

补充说明:固定写死的静态正则只要编译通过,运行时调用匹配逻辑几乎不会触发PatternSyntaxException,你可以根据实际场景选择是否保留该异常捕获逻辑;动态生成的正则必须在编译阶段就做异常捕获,避免程序运行崩溃。


内容的提问来源于stack exchange,提问作者16v

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:24:05