Products
GG网络技术分享 2025-03-18 16:14 0
要用正则来校验:192.168.1.0/24 这种写法的合法性,但我不熟这种东西,求大神指点,
ip/掩码 这种写法的合法性
iPv4的ip地址都是(1~255).(0~255).(0~255).(0~255)的格式
下面给出相对应的正则表达式:
\\\"^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\.\\\"
+\\\"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\.\\\"
+\\\"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\.\\\"
+\\\"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$\\\"
上面的一个不漏就是正确的验证ip的正则表达式,简单的讲解一下
\\d表示0~9的任何一个数字
{2}表示正好出现两次
[0-4]表示0~4的任何一个数字
| 的意思是或者
( )上面的括号不能少,是为了提取匹配的字符串,表达式中有几个()就表示有几个相应的匹配字符串
1\\d{2}的意思就是100~199之间的任意一个数字
2[0-4]\\d的意思是200~249之间的任意一个数字
25[0-5]的意思是250~255之间的任意一个数字
[1-9]\\d的意思是10~99之间的任意一个数字
[1-9])的意思是1~9之间的任意一个数字
\\.的意思是.点要转义(特殊字符类似,@都要加\\转义)
说到这里应该已经很清楚的知道了上面的正则表达式的意思。
不用正则,计算来验证
https://stackoverflow.com/questions/4209760/validate-an-ip-address-with-mask
iPv4的ip地址都是(1~255).(0~255).(0~255).(0~255)的格式
下面给出相对应的正则表达式:
\\\"^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9]).\\\"
+\\\"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d).\\\"
+\\\"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d).\\\"
+\\\"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$\\\"
上面的一个不漏就是正确的验证ip的正则表达式,简单的讲解一下
\\d表示0~9的任何一个数字
{2}表示正好出现两次
[0-4]表示0~4的任何一个数字
| 的意思是或者
( )上面的括号不能少,是为了提取匹配的字符串,表达式中有几个()就表示有几个相应的匹配字符串
1\\d{2}的意思就是100~199之间的任意一个数字
2[0-4]\\d的意思是200~249之间的任意一个数字
25[0-5]的意思是250~255之间的任意一个数字
[1-9]\\d的意思是10~99之间的任意一个数字
[1-9])的意思是1~9之间的任意一个数字
.的意思是.点要转义(特殊字符类似,@都要加\\转义)
说到这里应该已经很清楚的知道了上面的正则表达式的意思。
各位大神,我需求是这样的:允许用户填入 192.168.1.0/24 这个格式的ip地址,但到了我这里要检测用户填的合法性,并不是说要看ip在不在这个范围,我只想指点用户填的对不对
应该是通过计算出来的,先我已经有了检测一个ip地址是否合法的方法,但只能检测192.168.1.1 这样的
iPv4的ip地址都是(1~255).(0~255).(0~255).(0~255)的格式
下面给出相对应的正则表达式:
\\\"^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9]).\\\"
+\\\"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d).\\\"
+\\\"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d).\\\"
+\\\"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$\\\"
参考1楼拼接出来了:^(((1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9]).){1}((1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d).){2})((1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)/(?:[1-9]|[12][0-9]|3[012])){1}$
现如今随着互联网需求的不断发展,用户体验显得越来越重要,自然而然,系统的各项性能要求也越来越多,其中有一个体现系统稳定性的特性——系统的健壮性要求也是水涨船高。
作为一名开发人,我们对于健壮性的最大贡献就是要尽可能减少NPE
(空指针)情况的出现,毕竟一旦系统出现NPE
异常,前台便会收到500
错误响应,极其影响用户体验,所以为了避免这种情况的出现,提升系统的健壮性,我们在实际业务中经常需要对前端的各种数据进行校验,一般我们都会用到if-else
的方式,甚至更粗暴的方式,虽然有一种数据校验的方式即方便又很优雅,但在实际开发中却似乎并不受大家的青睐,今天我想把这种方式介绍给各位小伙伴。
正则表达式是一种匹配规则,被广泛应用在各种系统中,其本身与语言无关,除了java
、python
等语言支持外,linux
更是原生支持正则表达式,甚至连我们日常用到的各种编辑器、IDE
都是支持正则表达式的。当然,最重要的是在,掌握了这种技能,可以极大提升你的工作效率,让你工作更高效。好了,废话少说,我们先看下正则表达式的基本语法规则。
以下规则来源菜鸟教程,网上也都能搜到。
非打印字符非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:
特殊字符这里的特殊字符就是在正则表达式中有特殊含义中的字符,如果需要匹配特殊字符,需要进行转义
限定符限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*
或 +
或 ?
或 {n}
或 {n,}
或 {n,m}
共6种。
正则表达式的限定符有:
上面我们展示了正则表达式的一些基本匹配规则,接下来我们看下如何在我们的项目中使用正则表达式,完成我们的数据校验,这里我们主要是以java
为例。
这里是我们的公用方法:
/***校验数据格式
*@parampattern正则格式
*@paramtargetStr目标值
*@return
*/
privatestaticbooleanpattern(Stringpattern,StringtargetStr){
Patterncompile=Pattern.compile(pattern);
Matchermatcher=compile.matcher(targetStr);
returnmatcher.matches();
}
方法的第一个入参是我们数据的正则表达式,后面是我们要校验的数据
匹配手机号不知道各位小伙伴有没有好的手机号格式验证方法,反正我见到的除了直接强转成数字,就是正则表达式了,强转的过于暴力了。
Stringpattern="^\\\\d{11}";Stringinput="13501234567";
System.out.println(pattern(pattern,input));
我们正则表达式的含义是匹配11
位数字,更合理的表达式可以这样写:
Stringpattern="^[1]\\\\d{10}";
运行结果:
true
如果把输入的数据改成9
位、12
位,第一位不为1
,或者包含非数字的其他字符,返回结果均为false
日期格式,我一直觉得是一个很难校验的数据,在日常开发中经常看到小伙伴用try-catch
来校验,即直接转换成日期,如果转换失败就返回数据格式错误,但是这种方式不够优雅,过于暴力。
正则表达式才是数据校验yyds
Stringpattern2="^\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}";Stringinput2="2021-6-11";
System.out.println(pattern(pattern2,input2));
上面的正则表达式可以匹配2021-6-1
或者2021-06-12
这样的日期格式,当然对于2021-00-00
这样的日期也是可以匹配的,这个日期格式在java
中也是合法的日期,对应的日期是2020-11-30
。
是不是很方便也很简单,即优雅,又友好,它不香吗?
正则表达式真的用起来很方便,比如批量替换啥的,用正则表达式,简直不要太方便,比如最流行的IDEA
、常用的编辑器:
关于正则表达式的展示,就先分享这两个,其他的参照上面的规则,应该可以写出来,今天算是给大家校验数据提供一种思路,大家可以在自己的工作中用起来,毕竟正则表达式的应用太广泛了。好了,今天就到这里吧,各位小伙伴端午快乐。
- END -Demand feedback