英文 - 有特殊含义,注意如果匹配—使用中文符号
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();
}
}
再加一个检验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));
}
}
TestModel 是入参实体,可以增加 @ModelAttribute("testModel") 注解
public String addTestModel(@Validated TestModel testModel){
如果TestModel是复杂对象,如内部包含List等,需要@RequestBody 注解
public String addTestModel(@Validated @RequestBody 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;