查看: 76|回覆: 1

[教程] @Pattern 用于校验字符串是否符合特定正则表达式的注解

[複製鏈接]

4

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2010-3-30
發表於 2024-11-28 11:26:33 | 顯示全部樓層 |閲讀模式

@Pattern 是一个用于校验字符串是否符合特定正则表达式的注解,它在 Java 中常用于验证输入数据的格式。以下是 @Pattern 注解的详解和使用方法:

含义

@Pattern 注解用于在 Java 中对字段进行注解,以确保其值与指定的正则表达式匹配。这个注解可以应用于类属性、方法参数和返回值。

属性

  • regexp:这是 @Pattern 注解的核心属性,它接受一个字符串值,该值是一个正则表达式,用于定义要匹配的模式。
  • message:这是一个可选属性,用于定义当验证失败时返回的错误消息。
  • flags:这是一个可选属性,用于指定正则表达式的匹配标志,如 CASE_INSENSITIVE(不区分大小写)。

使用方法

@Pattern 注解可以与 Spring 的数据绑定和验证框架一起使用,例如在 Spring MVC 控制器中对请求参数进行验证。

示例代码

java

import javax.validation.constraints.Pattern;
public class User {
    @Pattern(regexp = "^[a-zA-Z0-9]{4,8}$", message = "用户名只能包含字母和数字,长度为4到8个字符")
    private String username;
    // 省略其他字段和getter/setter方法
}

在这个例子中,username 字段被注解为只能包含字母和数字,且长度必须在4到8个字符之间。如果输入的用户名不符合这个正则表达式,将返回指定的错误消息。

正则表达式元字符

  • ^ 表示匹配字符串的开始位置。
  • $ 表示匹配字符串的结束位置。
  • * 表示匹配前一个字符零次或多次。
  • + 表示匹配前一个字符一次或多次。
  • ? 表示匹配前一个字符零次或一次。
  • . 表示匹配任意单个字符。
  • | 表示逻辑“或”。
  • [] 用于定义字符集,匹配方括号内的任意一个字符。
  • () 用于分组。

注意事项

  • 当使用 @Pattern 注解时,确保正则表达式正确无误,否则会导致验证逻辑错误。
  • message 属性可以自定义错误消息,提高用户体验。
  • @Pattern 注解通常与 @Valid 或 @Validated 注解一起使用,后者用于开启方法级别的验证。
回覆

使用道具 舉報

0

主題

2091

回帖

1萬

積分

琼殿精英

金币
10576
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 2026-6-10 13:07:47 | 顯示全部樓層
哇,写的真详细!感谢楼主的分享~

刚学Spring MVC的时候对校验这一块不太懂,看了楼主的帖子终于搞清楚@Pattern怎么用了[emot]good[/emot]

想补充一个小点,除了Spring MVC,其实在JPA实体类里也可以用这个注解,比如:
  1. @Entity
  2. public class User {
  3.     @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
  4.     private String phone;
  5.    
  6.     @Pattern(regexp = "^\\w+@\\w+\\.\\w+$", message = "邮箱格式不正确")
  7.     private String email;
  8. }
複製代碼

这样在保存数据的时候也会自动校验,感觉配合JPA用也很方便~

另外想问一下楼主,如果需要同时校验多个规则,比如手机号必须是11位且以1开头,是不是只能写在同一个regexp里?有没有更优雅的写法呀?[emot]ask[/emot]
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

圆梦公社,专注于为全球华人提供纯粹技术交流的地方,请勿发布任何政治及违法的言论。如有相关侵权、举报、投诉及建议等,请发 E-mail:dzh188@hotmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部