java中使用正则表达式校验的几个例子-往下翻翻

> 注意Idea 提示规则错误,是误报,使用 ""+换行的方法解决,如下面都是这样解决的
 

英文 - 有特殊含义,注意如果匹配—使用中文符号

java中使用正则表达式校验的一个例子

@Test
	public void Zhengzt()
	{
		//正则规则
		Pattern pattern=Pattern.compile("^[\u0391-\uFFE5a-zA-Z·.。\\s]{0,}+$");
		
		//被校验的字符串
		Matcher match=pattern.matcher("hello name");
		
        if(match.matches()){
        	System.out.println();
        }
    
	}
public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(^(feat|fix|docs|style|refactor|test|perf|chore|jvm|pom|conf|apm)(\\(\\*\\)|\\((\\w+(, ?\\w+)*)\\))!?: .+(.|\\n)*)|(^Automatic merge(.|\\n)*)|(^Merge (.|\\n)*)");
        String str = "feat(innerapi,server): 运营功能迁移到wolf运营平台";
        Matcher match = pattern.matcher(str);
        System.out.println(match.matches());
    }

再加一个检验0.01-99.99之间小数的,且不允许以个位值非0而十分为0,也不允许小数以0结尾

@Test
	public void Zhengzt()  
    {  
		//1个数-不允许为0,2个数-不允许0开头,1个数加一个小数/两个小数,两个数加一个小数/两个小数
		Pattern pattern=Pattern.compile("" +
				"(^[1-9]{1}$)|" +
				"(^[1-9]{1}[0-9]{1}$)|" +
				"(^[0-9]{1}[.]{1}[0-9]{1,2}$)|" +
				"(^[1-9]{1}[0-9]{1}[.]{1}[0-9]{1,2}$)");
		Pattern pattern2=Pattern.compile("^[0]{1}[.][0]{1,2}$");//0.0和0.00是两个特殊字符
          
        //被校验的字符串  
		String str="0";
        Matcher match=pattern.matcher(str);  
        Matcher match2=pattern2.matcher(str);  
          
        if((!match.matches())?true:(match2.matches()?true:false)){
        	//不满足条件
            System.out.println("不满足条件");  
        }else{
        	System.out.println("满足条件");
        }
      
    }

连个特殊的点

• 和 ·

必须包含数字和字母-不可以全部为数字或者字母,长度6-12

 Pattern pattern=Pattern.compile("^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,12}$");  

正则表达式的工具类和测试类

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式工具类
 */
public class PatternAndMatcherUtil {
	
	/**
	 * 数字正则检测,长度限定为1-11位
	 * @return true 合法,false 不合法
	 */
	public static boolean checkInt1to11(String str){
		//正则规则  
        Pattern pattern=Pattern.compile("^[0-9]{1,11}+$");  
        //被校验的字符串  
        Matcher match=pattern.matcher(str);  
        return match.matches();
	}
	
	/**
	 * 姓名正则检测,允许出现 中文、英文、·、• 、空格、长度为1-50
	 * @param name
	 * @return
	 */
	public static boolean checkStringName(String name){
		//正则规则  
        Pattern pattern=Pattern.compile("^[\u0391-\uFFE5a-zA-Z·•\\s]{1,50}+$");  
        //被校验的字符串  
        Matcher match=pattern.matcher(name);  
        return match.matches(); 
	}
	
	/**
	 * 多个联系方式正则检测,允许 数字、-、+、,(逗号),长度1-50
	 * @param phones
	 * @return
	 */
	public static boolean checkStringPhones(String phones){
		//正则规则  
        Pattern pattern=Pattern.compile("^[0-9-+,]{1,50}+$");  
        //被校验的字符串  
        Matcher match=pattern.matcher(phones);  
        return match.matches(); 
	}
	
	/**
	 * 地址正则检测,允许任何字符,中文、字母、数字、—、,、·、空格
	 * 长度1-200
	 * @return
	 */
	public static boolean checkStringAddress1to200(String address){
		//正则规则  
        Pattern pattern=Pattern.compile("^[\u0391-\uFFE5a-zA-Z·•\\s—,,]{1,200}+$");  
        //被校验的字符串  
        Matcher match=pattern.matcher(address);  
        return match.matches(); 
	}
	

}


测试类

import org.junit.Test;

import cn.acsm.farmeasy.order.core.utils.PatternAndMatcherUtil;
import junit.framework.TestCase;

/**
 * Java 正则检验测试
 * @author wj
 *
 */
public class PatternAndMatcherTest {

	/**
	 * 数字正则测试,长度1-11
	 */
	@Test
	public void testCheckInt1to11(){
		String str="11111111111";
		TestCase.assertEquals("数据非法",true,PatternAndMatcherUtil.checkInt1to11(str));  
	}
	
	/**
	 * 姓名正则测试
	 */
	@Test
	public void testCheckStringName(){
		String name="a 你好·n";
		TestCase.assertEquals("数据非法",true,PatternAndMatcherUtil.checkStringName(name));  
	}
	
	/**
	 * 多个联系方式正则测试
	 */
	@Test
	public void testCheckStringPhones(){
		String phones="1,+,-";
		TestCase.assertEquals("数据非法",true,PatternAndMatcherUtil.checkStringPhones(phones));  
	}
	
	/**
	 * 地址正则测试
	 */
	@Test
	public void testCheckStringAddress1to200(){
		String address="a-—北京,,";
		TestCase.assertEquals("数据非法",true,PatternAndMatcherUtil.checkStringAddress1to200(address));  
	}
	
}


在web项目中对实体增加校验-@Validated   http://blog.csdn.net/u012373815/article/details/72049796

TestModel 是入参实体,可以增加 @ModelAttribute("testModel") 注解

public String addTestModel(@Validated TestModel testModel){ 

如果TestModel是复杂对象,如内部包含List等,需要@RequestBody 注解

public String addTestModel(@Validated @RequestBody TestModel testModel){ 

TestModel内部

地址属性校验

 @NotEmpty(message="地址不可为空")
    @Size(min=1,max=200,message="地址长度在1-200")
    @Pattern(regexp="^[\u0391-\uFFE5a-zA-Z·•\\s—,,]{1,200}+$",message="地址仅限中文、字母、数字、—、,、·、空格")
    private String address;

姓名属性校验

 @NotEmpty(message="收件人姓名不可为空")
    @Size(min=1,max=50,message="收件人姓名长度在1-50")
    @Pattern(regexp="^[\u0391-\uFFE5a-zA-Z·•\\s]{1,50}+$",message="姓名仅限中文、字母、·、空格")
    private String name;

多个联系方式校验

@NotEmpty(message="联系方式不可为空")
    @Size(min=1,max=50,message="联系方式长度在1-50")
    @Pattern(regexp="^[0-9-+,]{1,50}+$",message="联系方式长度1-50,仅限数字、-、+、,(逗号)")
    private String phone;

限定 数字加逗号 111,222,333


import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 测试 Java 正则校验 111,222,333
 */
public class Del {

    public static void main(String[] args) {
        Del c = new Del();
        c.checkParam(" ");//不通过
        c.checkParam("11");//通过
        c.checkParam("11,11");//通过
        c.checkParam("11,11,11");//通过
        c.checkParam("11,");//不通过
        c.checkParam(",11");//不通过
        c.checkParam(",");//不通过

    }

    private void checkParam(String catgoryIds){
        Preconditions.checkArgument(StringUtils.isNotBlank(catgoryIds),"#checkParam 入参不可为空");
        //校验规则 111 或者 111,222 或者111,222,333
        Pattern pattern = Pattern.compile("" +
                "(^[0-9]{1,}([,]{1}[0-9]{1,}){0,}$)");
        Matcher match=pattern.matcher(catgoryIds);
        Preconditions.checkArgument(match.matches(),"#checkParam 入参不合规,正常格式 111,222,333");
    }
}

   日期校验 yyyy-MM-dd

 public static void main(String[] args) {
        System.out.println(checkDate("yyyy-MM-dd"));
    }
    public static boolean checkDate(String checkdDate){
        Pattern pattern = Pattern.compile("" +
                "(^[0-9]{4}([-]{1})[0-9]{2}([-]{1})[0-9]{2}$)");

        return pattern.matcher(checkdDate).matches();

    }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值