在java中针对ipv4,ipv6(含缩写)的正则效验

/**
	 * iPv4
	 */
	public static final String PORTAL_APPIPV4_VALIDATED="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";

上面是ipv4的,接下来是ipv6d 

/**
	 * ipv6
	 */
	public static final String PORTAL_APPIPV6_VALIDATED="(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4})|" + "(([0-9a-fA-F]{1,4}:){1,7}:)|"
			+ "(([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4})|" + "(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|"
			+ "(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|"
			+ "(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|"
			+ "(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|"
			+ "([0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:)+" + "((:[0-9a-fA-F]{1,4}){1,7}|:)|"
			+ "([0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,7})|:)+";

先说一下ipv4和ipv6的示例:

当涉及IPV4时,以下是一些IP地址示例:

  1. IPV4: 192.0.2.1
  2. IPV4: 172.16.254.1
  3. IPV4: 10.0.0.1

而对于IPv6,这里有一些示例(包括缩写形式):

  1. IPV6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. IPV6: 2001:db8::1
  3. IPV6: 2001:0db8:0:0:0:0:2:1

如果对应请求类来说你们的字段是分开判断的,那么直接在字段上+注解

@Pattern (regexp = FieldValidatedPatterns.PORTAL_SEMICOLON_VALIDATE, message = "ip白名单配置格式不正确")

我这个是一个字段可以是ipv4也可以是ipv6(含缩写形式)之间用;隔开,不允许超过五十个

我们得到这个字符串ip,去进行判断,判断后去重,然后将List转化成string

//效验IP是否正确,如果不正确返回Null,正确返回String
	public String ipValidation(String input){
		List<String> resultList=new ArrayList<> ();
		//定义ipv6与其缩写
		String ipv6SmallRegex = FieldValidatedPatterns.PORTAL_APPIPV6_VALIDATED;
		//定义ipv4
		String ipv4Regex = FieldValidatedPatterns.PORTAL_APPIPV4_VALIDATED;
		//分割input
		String[] ips = input.split (";");
		Pattern ipv6SmallPattern = Pattern.compile (ipv6SmallRegex);
		for (String ip : ips)
		{
			Matcher ipv6SmallMatcher = ipv6SmallPattern.matcher (ip);
			if (!ipv6SmallMatcher.matches ())
			{
				//ipv6格式不正确开始判断ipv4
				Pattern ipv4Pattern = Pattern.compile (ipv4Regex);
				Matcher ipv4PatternMatcher = ipv4Pattern.matcher (ip);
				if (ipv4PatternMatcher.matches ())
				{
					resultList.add (ip);
				}
				else
				{
					//全部不正确
					log.info ("regular Not compliant-ipv4:{}",ip);
					return null;
				}
			}else{
				resultList.add (ip);
			}
		}
		if(resultList.isEmpty ()){
			return  null;
		}
		if(resultList.size ()>50){
			log.info ("regular Not compliant-size50:{}",resultList.size ());
			return null;
		}
		//如果格式全部正确,开始去重
		List<String> deduplicatedList = resultList.stream()
				.distinct()
				.collect(Collectors.toList());
		return String.join (";",deduplicatedList);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值