如何使用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
相关产品推荐
相关产品推荐

