Java中使用@Pattern注解验证URL时匹配多域名后缀的问题
解决javax.validation @Pattern验证长域名后缀URL失败的问题
问题根源
你当前的正则表达式中,域名后缀匹配段\\.[a-zA-Z0-9()]{1,6}存在两个核心问题:
- 长度限制为1-6位,无法匹配
.systems这类超过6位的顶级域名后缀 - 包含了不合法的
()字符,域名后缀仅允许字母、数字和连字符(-)
修改后的正则表达式
调整后缀匹配段为符合域名规范的格式,即可支持所有合法域名后缀:
@Pattern(message = "Must be a valid URL", regexp = "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9-]{2,63}\\b([-a-zA-Z0-9()@:%_\\+.~#?&;//=]*)")
关键修改说明
- 移除后缀匹配中的
()字符,对齐域名后缀的合法字符规则 - 将长度限制从
{1,6}改为{2,63}:- 最低2位覆盖
.co、.io这类短后缀 - 最高63位符合ICANN规定的顶级域名最长长度限制
- 最低2位覆盖
- 添加连字符
-,支持.co-op这类包含连字符的合法后缀
验证示例
修改后以下URL均可通过验证:
https://www.test.comhttps://api-apps.testapp.systems/test-service/v1/testhttps://example.co-op/path
内容的提问来源于stack exchange,提问作者H.beuhier
相关产品推荐
相关产品推荐

