这是我的IP地址正则表达式。如何修改它以在最后一部分中排除0(零)。
^([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 //无效
答案 0 :(得分:1)
确保您的电话号码不是以零开头 ...
[1-9]\d?
例如,您的正则表达式以
结尾\.([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$
这将允许1到255。
为清楚起见,多余的转义符被忽略了。
对于其他3个可以为0的情况,只需添加一个仅包含0的选项
\.(0|[1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])
答案 1 :(得分:1)
仅特殊处理最后一部分
^((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]?)$
答案 2 :(得分:-1)
非正则表达式解决方案如何
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
并进行一些边界检查。我认为这更容易阅读,因此可以维护