基本上,我正在尝试检查String是否是一个有效的IP地址而不使用Java中的外部库(它不必是另一端有工作主机的IP;它也可能是未使用的).我无法检查它是否是IP地址,因为我也想要DNS支持.由于以下选项有效:
但以下内容无效:
此时(我将继续更新),我会做以下检查:
host != null;
!host.contains(" ");
host.contains(":");
Run Code Online (Sandbox Code Playgroud)
我认为可以做的其他检查但我不知道该怎么办:
*包含1且仅包含1个冒号*如果它只包含数字和句点,则它必须包含3个且仅包含3个句点,4个数字,每个数字必须介于0到255之间*冒号后面的数字是一个数字,介于0和0之间65535
谢谢!
我会使用这样的正则表达式:
import java.util.regex.Pattern;
public class IpCheck {
public static void main(String[] args) {
Pattern p = Pattern.compile("^"
+ "(((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}" // Domain name
+ "|"
+ "localhost" // localhost
+ "|"
+ "(([0-9]{1,3}\\.){3})[0-9]{1,3})" // Ip
+ ":"
+ "[0-9]{1,5}$"); // Port
System.out.println(p.matcher("1.2.3.4:55555").matches());
System.out.println(p.matcher("localhost:1").matches());
System.out.println(p.matcher("google.com:12345").matches());
System.out.println(p.matcher("1.2.abc:54321").matches());
System.out.println(p.matcher("1.2.3.4").matches());
System.out.println(p.matcher("1.2:34").matches());
System.out.println(p.matcher("local host:12345").matches());
System.out.println(p.matcher("stackoverflow.com:234.5").matches());
System.out.println(p.matcher("localhost:65536").matches());
}
}
Run Code Online (Sandbox Code Playgroud)
印刷品:
true
true
true
true
false
false
false
false
true
Run Code Online (Sandbox Code Playgroud)
它的工作原理除了端口范围之外,为此,我建议您提取端口号(如果有的话),并在正则表达式之外.我的观点是Regex不是为了测试整数范围(仍然可能)
| 归档时间: |
|
| 查看次数: |
2802 次 |
| 最近记录: |