Java 11/Android应用:如何验证带端口的合法URL/IP格式?
URL/IP语法合法性校验方案
适用正则表达式
直接使用以下正则表达式,可覆盖你列出的所有合法场景,同时排除非法格式:
String validRegex = "^((http|https|ftp)://)?((([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,})|(([0-9]{1,3}\\.){3}[0-9]{1,3}))(:[0-9]{1,5})?(/.*)?$";
正则规则说明
((http|https|ftp)://)?:可选的协议头,支持http、https、ftp三种协议([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}:匹配合法域名,要求至少包含一个二级域名(如stackoverflow.com、amazon.co.uk),域名允许包含字母、数字、连字符([0-9]{1,3}\\.){3}[0-9]{1,3}:匹配语法合法的IP地址,仅校验四段数字的结构,不验证实际IP有效性(如999.999.999.999会被视为合法)(:[0-9]{1,5})?:可选的端口号,支持1-5位数字(符合0-65535的语法范围)(/.*)?:可选的路径部分,允许域名/IP后附带任意格式的路径
校验结果验证
合法示例全部匹配:
- stackoverflow.com ✅
- http://stackoverflow.com ✅
- http://amazon.co.uk ✅
- https://www.amazon.co.uk ✅
- ftp://10.1.1.9 ✅
- 10.1.1.9:1234 ✅
- http://10.1.1.9:1234/bla ✅
非法示例全部排除:
- http://bla ❌(缺少合法域名/IP主体)
- bla ❌(无有效域名结构)
- --- ❌(无合法字符)
- 10.9 ❌(IP段数不足)
- 10.1.1. ❌(IP结尾冗余点)
- 10.1..1.9 ❌(IP存在空段)
代码使用方式
直接调用myURL.trim().matches(validRegex)即可完成校验,matches方法会自动匹配整个字符串,正则中的^和$确保输入内容完全符合规则。
内容的提问来源于stack exchange,提问作者Neph
相关产品推荐
相关产品推荐

