最后一部分非零的 IP 地址的正则表达式
Regex for IP address with last part non-zero
这是我的 IP 地址正则表达式。我如何修改它以在最后一部分中排除 0 (ZERO)。
^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$
示例:
148.23.54.20 //有效
148.23.54.0 //无效
非正则表达式解决方案如何:
String ip = /* some ip */;
String[] bytes = ip.split("\.");
if (!bytes[3].equals("0") && Arrays.stream(bytes).map(Integer::parseInt).allMatch(i -> i >= 0 && i < 256)) {
//Valid ip
}
您可以检查 IntegerParseException
并进行一些边界检查,如果您还期待一些疯狂的输入。我相信这更具可读性,因此更易于维护
确保您的号码不以开头...
[1-9]\d?
因此,例如,您的正则表达式将以
结尾
\.([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$
这将允许 1 到 255。
为清楚起见,省略了额外的转义符。
旁注
对于 可以 为 0 的其他 3 种情况,只需添加一个仅适用于 0
的选项
\.(0|[1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])
只对最后一部分进行特殊处理
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?)$
这是我的 IP 地址正则表达式。我如何修改它以在最后一部分中排除 0 (ZERO)。
^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$
示例:
148.23.54.20 //有效
148.23.54.0 //无效
非正则表达式解决方案如何:
String ip = /* some ip */;
String[] bytes = ip.split("\.");
if (!bytes[3].equals("0") && Arrays.stream(bytes).map(Integer::parseInt).allMatch(i -> i >= 0 && i < 256)) {
//Valid ip
}
您可以检查 IntegerParseException
并进行一些边界检查,如果您还期待一些疯狂的输入。我相信这更具可读性,因此更易于维护
确保您的号码不以开头...
[1-9]\d?
因此,例如,您的正则表达式将以
结尾\.([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$
这将允许 1 到 255。
为清楚起见,省略了额外的转义符。
旁注
对于 可以 为 0 的其他 3 种情况,只需添加一个仅适用于 0
的选项\.(0|[1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])
只对最后一部分进行特殊处理
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?)$