使用正则表达式验证输入字符串是否为0-255之间的数字

时间:2015-07-28 18:13:22

标签: java regex

我在将输入字符串与Regex匹配时遇到问题。我想验证输入数字在0-255之间,长度最多3个字符。代码工作正常但是当我输入000000到任何长度时显示为true而不是false。

这是我的代码: -

String IP = "000000000000000";
        System.out.println(IP.matches("(0*(?:[0-9][0-9]?|[0-2][0-5][0-5]))"));

11 个答案:

答案 0 :(得分:7)

您可以使用此正则表达式:

boolean valid = IP.matches("\\b(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\\b");

RegEx Demo

答案 1 :(得分:3)

您可以使用与"0""1",... "255"匹配的模式:

"([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

Demo on Ideone

答案 2 :(得分:1)

使用边界标签确保只匹配(0到255)个数字,我必须提供的优化模式是:

\b(?:1\d{2}|2[0-4]\d|[1-9]?\d|25[0-5])\b

Pattern Demo(在PHP / PCRE中显示步数)

检查从0256的列表时,

4010步

此模式与01001不匹配。 (在一个或多个前导零上不匹配)

考虑:

  1. 对连续的重复字符使用量词。
  2. 不按顺序组织替代方案(一位数,两位数,100& 249,250-255 ),但首先是最快的错误匹配。
  3. 避免非必要捕获(或非捕获)组。 (尽管看似合乎逻辑地压缩了"两百个"部分模式)

答案 3 :(得分:0)

boolean valid = IP.matches("(0?[0-9]{1,2}|1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])");

答案 4 :(得分:0)

完成ip inet4匹配:

JS

/(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])/g.exec(myIp);

http://www.webtoolkitonline.com/xml-formatter.html

缩小:

/(1?(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])/g.exec(myIp);

https://regex101.com/r/tU3gC3/12

答案 5 :(得分:0)

这适用于以下包含初始零的模式和ip 例如:023.45.12.56

pattern=(\\d{1,2}|(0|1)\\d{2}|2[0-4]\\d|25[0-5]);

答案 6 :(得分:0)

如果您需要前导零,请尝试以下操作:

"((\\d{1,2}|[01]\\d{1,2}|[0-2][0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|[01]\\d{1,2}|[0-2][0-4]\\d|25[0-5])"

满足以下条件:IP地址是" A.B.C.D"形式的字符串,其中A,B,C和D的值可以在0到255之间。允许前导零。 A,B,C或D的长度不能大于3.

也许有人可以帮助进行额外的简化?

答案 7 :(得分:0)

如果您想使用' ip / mask'验证ip4,那么正则表达式如下所示:

^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\/([0-9]|[1-2][0-9]|3[0-2]))$

只是ip

^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

用于测试它的JS代码

function isMatchByRegexp(stringToValidate, regexp) {
var re = new RegExp(regexp);
return re.test(stringToValidate);
}

答案 8 :(得分:0)

对此进行了测试:

static String pattern = "^(([0-1]?[0-9]?[0-9]?|2[0-4][0-9]|25[0-5])\\.){3}([0-1]?[0-9]?[0-9]?|2[0-4][0-9]|25[0-5]){1}$";

它适用于以下情况:

  • IP地址xxx.xxx.xxx.xxx/xx.xx.xx.xx/x.x.x.x/这些地址的组合。
  • 允许前导零。
  • 愤怒0-255 /最多3点。

答案 9 :(得分:0)

请尝试这个

"^(((\d|0\d|00\d|\d{2}|0\d{2}|1\d{2}|2[0-4]\d|2[0-5]{2})\.){3})(\d|0\d|00\d|\d{2}|0\d{2}|1\d{2}|2[0-4]\d|2[0-5]{2})$"

它也可用于前导零

答案 10 :(得分:0)

(2[0-4][0-9])|([0-1]?[0-9]?[0-9])

专门匹配0到249