简介
字符串校验器。开发excel批量处理数据时开发使用,快速校验读取出的每一个单元格数据是否符合预定格式;
api
- 目标字符串是目标数组中的一个 checkContains(String[] array);
- 限制字符串的最大长度 checkMaxLength(Long max);
- 非空验证 checkEmpty();
- 金额校验:最大金额校验 checkMaxMoney(Long max);
- 金额校验:最小金额校验 checkMinMoney(Long min);
- 纯数字的字符串校验 checkStrNumber();
- 金额校验:两位小数的字符串 checkMoneyNumber();
- 字母汉字组合的字符串 checkStrName();
- 联系电话格式验证 checkTel();
- 日期格式校验 checkDate(String pattern);
- 自定义正则表达式 checkPattern(String pattern);
源码
package kkUtils.poi;
/**
* @公司名称:kk51
* @作者:lud —— 2020年8月8日 下午11:06:00
* @说明:常用正则表达式
*/
public class ExcelValidatorPattern {
//------------------ 整数 ---------------------------//
/** 0~99的整数 */
public static final String NUMBER_1 = "^0|[1-9][0-9]?$";
/** 0~99999的整数 */
public static final String NUMBER_2 = "^0|[1-9][0-9]{0,4}$";
//------------------ 小数 ---------------------------//
/** 10位整数或2位小数 */
public static final String FLOAT_NUMBER_1 = "^0|[1-9][0-9]{0,9}(\\.[0-9]{1,2})?$";
/** 整数或2位小数 */
public static final String FLOAT_NUMBER_2 = "^(([1-9]{1}\\d*)|(0{1}))(\\.\\d{1,2})?$";
//------------------ 字符串 ---------------------------//
/** 汉字、字母、数字、下划线 */
public static final String STR_1 = "^[\u4E00-\u9FA5A-Za-z0-9_]+$";
/** 汉字、字母 */
public static final String STR_2 = "[A-Za-z\u4e00-\u9fa5]+$";
/** 纯数字的字符串 */
public static final String STR_3 = "[0-9]+";
//------------------ 常用规则串 ---------------------------//
/**
* 支持格式示例-固话:+86-010-40020020,010-40020020 国家代码选填
* 手机:+86-10-13523458056, +86-13523458056 ,10-13523458056 ,13523458056 国家代码和区号选填
*/
public static final String TEL = "^(((\\+\\d{2}-)?0\\d{2,3}-\\d{7,8})|((\\+\\d{2}-)?(\\d{2,3}-)?([1][3,4,5,7,8][0-9]\\d{8})))$";
/** 身份证号校验 */
public static final String IDCARD = "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)";
/** 邮箱校验 */
public static final String MAIL = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
/** 域名校验 */
public static final String DOMAIN = "[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\\.?";
/** IP地址校验 */
public static final String IP = "((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))";
/** 邮政编码校验 */
public static final String POSTCODE = "[1-9]\\d{5}(?!\\d)";
}
package kkUtils.poi;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @公司名称:kk51
* @作者:lud —— 2020年8月8日 下午11:06:00
* @说明:校验器
*/
public class ExcelValidator extends ExcelValidatorPattern {
public static void main(String[] args) {
System.out.println(new ExcelValidator("231", "课程金额").checkEmpty().checkMaxMoney(123l));
}
/**
* 方法功能说明:@1.目标字符串是目标数组中的一个
* 创建时间:2020年8月8日 下午11:24:06 --lud
*/
public ExcelValidator checkContains(String[] array) {
boolean flag = false;
if (result) {
String str = String.valueOf(this.target);
for (String tar : array) {
if (str.trim().equals(tar)) {
flag = true;
break;
}
}
if (!flag) {
setValue(false, text+"数据格式不正确;");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/**
* 方法功能说明:@1.限制字符串的最大长度
* 创建时间:2020年8月8日 下午11:24:06 --lud
*/
public ExcelValidator checkMaxLength(Long max) {
if (result) {
String str = String.valueOf(this.target);
if (str.length() > max) {
setValue(false, text+"不能超过"+max+"个字符长度;");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/**
* 方法功能说明:@1.非空验证
* 创建时间:2020年8月8日 下午11:24:06 --lud
*/
public ExcelValidator checkEmpty() {
if (result) {
String str = String.valueOf(this.target);
if (null == str || "".equals(str.trim()) || "null".equals(str.trim())) {
setValue(false, text+"不能为空;");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/**
* 方法功能说明:@1.金额校验:最小金额校验
* 创建时间:2020年8月24日 上午10:31:12 --lud
*/
public ExcelValidator checkMinMoney(Long min){
if (result) {
String str = String.valueOf(this.target);
if (Double.valueOf(str)<=min) {
setValue(false, text+"必须大于"+min+";");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/**
* 方法功能说明:@1.金额校验:最大金额校验
* 创建时间:2020年8月24日 上午10:31:12 --lud
*/
public ExcelValidator checkMaxMoney(Long max){
if (result) {
String str = String.valueOf(this.target);
if (Double.valueOf(str) >= max) {
setValue(false, text+"必须小于"+max+";");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/** =========== 常用的正则表达式 ============ */
/**
* 方法功能说明:@1.纯数字的字符串校验
* 创建时间:2020年8月8日 下午11:24:06 --lud
*/
public ExcelValidator checkStrNumber() {
if (result) {
String str = String.valueOf(this.target);
Pattern pattern = Pattern.compile("[0-9]+");
Matcher isNum = pattern.matcher(str);
if(!isNum.matches()){
setValue(false, text+"格式错误;");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/**
* 方法功能说明:@1.金额校验:两位小数的字符串
* 创建时间:2020年8月24日 上午10:31:01 --lud
*/
public ExcelValidator checkMoneyNumber(){
if (result) {
String str = String.valueOf(this.target);
Pattern pattern = Pattern.compile("^(([1-9]{1}\\d*)|(0{1}))(\\.\\d{1,2})?$");
Matcher isNum = pattern.matcher(str);
if(!isNum.matches()){
setValue(false, text+"格式错误;");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/**
* 方法功能说明:@1.字母汉字组合的字符串
* 创建时间:2020年8月24日 上午10:36:47 --lud
*/
public ExcelValidator checkStrName(){
if (result) {
String str = String.valueOf(this.target);
Pattern pattern = Pattern.compile("[A-Za-z\u4e00-\u9fa5]+$");
Matcher isNum = pattern.matcher(str);
if(!isNum.matches()){
setValue(false, text+"必须是字母或汉字;");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/**
* 联系电话格式验证
* 支持格式示例-固话:+86-010-40020020,010-40020020 国家代码选填
* 手机:+86-10-13523458056, +86-13523458056 ,10-13523458056 ,13523458056 国家代码和区号选填
* 创建时间:2020年8月24日 上午10:36:47 --lud
*/
public ExcelValidator checkTel(){
if (result) {
String str = String.valueOf(this.target);
Pattern pattern = Pattern.compile("^(((\\+\\d{2}-)?0\\d{2,3}-\\d{7,8})|((\\+\\d{2}-)?(\\d{2,3}-)?([1][3,4,5,7,8][0-9]\\d{8})))$");
Matcher isNum = pattern.matcher(str);
if(!isNum.matches()){
setValue(false, text+"格式错误;");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/**
* 方法功能说明:@1.日期格式校验
* 创建时间:2020年9月9日 下午2:23:28 --lud
* 缺陷:1、非闰年也可以输入02-29号; 2、日期必须是1000年之后的
*/
public ExcelValidator checkDate(String pattern){
pattern = (pattern!=null && !"".equals(pattern))?pattern:"yyyy-MM-dd";
//==========确认正则的格式===============
String confirmPattern = "";
if ("yyyyMMdd".equals(pattern)) {
confirmPattern = "^([1-9][0-9]{3})((((0[13578])|(1[02]))((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|(11))((0[1-9])|([12][0-9])|(30)))|((02)(([01][1-9])|(2[0-9]))))$";
} else if ("yyyy-MM-dd".equals(pattern)) {
confirmPattern = "^([1-9][0-9]{3})-((((0[13578])|(1[02]))-((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|(11))-((0[1-9])|([12][0-9])|(30)))|((02)-(([01][1-9])|(2[0-9]))))$";
}
if (result) {
String str = String.valueOf(this.target);
Pattern pattern1 = Pattern.compile(confirmPattern);
Matcher isDate = pattern1.matcher(str);
if(!isDate.matches()){
setValue(false, text+"格式错误;");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
/**
* 方法功能说明:@1.自定义正则表达式
* 创建时间:2020年8月8日 下午11:24:06 --lud
*/
public ExcelValidator checkPattern(String pattern) {
if (result) {
String str = String.valueOf(this.target);
if(isEmpty(str)) { return new ExcelValidator(result, errorMsg, target, text); }
Pattern pattern1 = Pattern.compile(pattern);
Matcher isPattern = pattern1.matcher(str);
if(!isPattern.matches()){
setValue(false, text+"格式错误;");
}
}
return new ExcelValidator(result, errorMsg, target, text);
}
//=========== 成员对象 和 构造方法 ============
private boolean result = true;
private String errorMsg;
/**
* 被验证的对象
*/
private Object target;
/**
* 被验证对象的注释
*/
private String text;
public boolean getResult() {
return result;
}
public String getErrorMsg() {
return errorMsg;
}
/**
* 方法功能说明:@1.赋值
* 创建时间:2020年8月8日 下午11:13:26 --lud
*/
public void setValue(boolean result, String errorMsg){
this.result = result;
this.errorMsg = errorMsg;
}
public ExcelValidator(Object target, String text) {
this.target = target;
this.text = text;
}
public ExcelValidator(boolean result, String errorMsg, Object target, String text) {
this.result = result;
this.errorMsg = errorMsg;
this.target = target;
this.text = text;
}
@Override
public String toString() {
return "ExcelValidator [result=" + result + ", errorMsg=" + errorMsg + "]";
}
}