All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fhs.common.utils.CheckUtils Maven / Gradle / Ivy

There is a newer version: 3.0.6
Show newest version
package com.fhs.common.utils;

import com.fhs.common.constant.Constant;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;

/**
 * <验证工具类>
 *
 * @author wanglei
 * @version [版本号, 2013年8月7日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class CheckUtils {
    /**
     * <判断对象是否为null或者空>
     *
     * @param obj 需要判断的对象
     * @return 如果对象为null或者空则返回true
     */
    public static boolean isNullOrEmpty(Object obj) {
        if (obj == null || Constant.EMPTY.equals(StringUtil.toString(obj).trim())) {
            return true;
        }
        return false;
    }

    /**
     * 判断对象不为空 适用于字符串或者对象
     *
     * @param obj 需要判断的对象
     * @return 如果对象不为空或者null 返回true
     */
    public static boolean isNotEmpty(Object obj) {
        if (obj == null || Constant.EMPTY.equals(StringUtil.toString(obj).trim())) {
            return false;
        }
        return true;
    }

    /**
     * 判断对象不为空 适用于字符串数组或者对象数组
     *
     * @param objs 需要判断的对象
     * @return 如果对象不为空或者null 返回true
     */
    public static boolean isNotEmpty(Object[] objs) {
        if (objs == null || Stream.of(objs).allMatch(obj -> Constant.EMPTY.equals(StringUtil.toString(obj).trim()))) {
            return false;
        }
        return true;
    }


    /**
     * 判断是否是数字
     *
     * @param obj 需要判断的元素
     * @return 是否是数字
     */
    public static boolean isNumber(Object obj) {

        return checkPattern(StringUtil.toString(obj).trim(), "^[-+]?[0-9]+(\\.[0-9]+)?$");
    }


    /**
     * 判断是否是正数
     *
     * @param obj 需要判断的元素
     * @return 是否是正数
     */
    public static boolean isPositiveNumber(Object obj) {

        return checkPattern(StringUtil.toString(obj).trim(), "^[0-9]+(\\.[0-9]+)?$");
    }

    /**
     * 判断是否是Double类型
     *
     * @param obj 需要判断的元素
     * @return 是否是Double类型(小数点后2位小数)
     */
    public static boolean isDouble(Object obj) {
        return checkPattern(StringUtil.toString(obj).trim(), "^[0-9]+(.[0-9]{1,2})?$");
    }

    /**
     * 判断是否是int类型
     *
     * @param obj 需要判断的元素
     * @return
     */
    public static boolean isInt(Object obj) {
        return checkPattern(StringUtil.toString(obj).trim(), "^[0-9]?$");
    }

    /**
     * 判断集合不为空并且不为null
     *
     * @param con 集合
     * @return 是否为空或者null
     */
    public static boolean checkCollectionIsNullOrEmpty(@SuppressWarnings("rawtypes") Collection con) {
        return con == null || con.size() == 0;
    }

    /**
     * 判断字符串是否满足正则
     *
     * @param str     需要判断的字符串
     * @param pattern 正则
     * @return 判断结果
     */
    public static boolean checkPattern(String str, String pattern) {
        try {
            if (pattern.startsWith("/")) {
                pattern = pattern.substring(1);
            }
            if (pattern.endsWith("/")) {
                pattern = pattern.substring(0, pattern.length() - 1);
            }
            return str.matches(pattern);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }


    /**
     * 判断字符串是否满足手机正则
     *
     * @param str 手机号
     * @return 判断结果
     */
    public static boolean checkPhone(String str) {
        // 手机正则
        String phone = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
        return str.matches(phone);
    }

    /**
     * <判断字符串是否是汉字>
     *
     * @param str 汉字
     * @return 判断结果
     */
    public static boolean checkCharacters(String str) {
        // 汉字正则
        String chineseCharacters = "[\u4e00-\u9fa5]+";
        return str.matches(chineseCharacters);
    }

    /**
     * <判断邮箱格式是否满足条件>
     *
     * @param emailStr 需要校验的邮箱字符串
     */
    public static boolean checkEmail(String emailStr) {
        // 邮箱正则
        String emailRegStr = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        return emailStr.matches(emailRegStr);
    }

    /**
     * 判断用户名格式是否满足条件
     *
     * @param userNameStr 需要校验的用户字符串
     */
    public static boolean checkUserName(String userNameStr) {
        // 用户名正则
        String userNameRegStr = "^([a-zA-Z_]{4,32})$";
        return userNameStr.matches(userNameRegStr);
    }

    /**
     * <判断是否满足指定格式的日期>
     *
     * @param dateStr 需要校验的日期字符串
     * @return
     */
    public static boolean checkDate(String dateStr) {
        if (null == dateStr || "".equals(dateStr)) {
            return false;
        }
        boolean flag = false;
        Pattern pattern0 = null;
        Matcher match0 = null;
        String datePattern = "(" +
                // 第一种情况为月份是大月的有31天。
                "(^\\d{3}[1-9]|\\d{2}[1-9]\\d{1}|\\d{1}[1-9]\\d{2}|[1-9]\\d{3}" + // 年
                "([-/\\._]?)" + // 时间间隔符(-,/,.,_)
                "(10|12|0?[13578])" + // 大月
                "([-/\\._]?)" + // 时间间隔符(-,/,.,_)
                "((3[01]|[12][0-9]|0?[1-9])?)" + // 日(31)要验证年月因此出现0/1次
                "([\\s]?)" + // 空格
                "((([0-1]?[0-9]|2[0-3]):([0-5]?[0-9]):([0-5]?[0-9]))?))$" + // 时分秒
                "|" + // 或
                // 第二种情况为月份是小月的有30天,不包含2月。
                "(^\\d{3}[1-9]|\\d{2}[1-9]\\d{1}|\\d{1}[1-9]\\d{2}|[1-9]\\d{3}" + // 年
                "([-/\\._]?)" + // 时间间隔符(-,/,.,_)
                "(11|0?[469])" + // 小月不含2月
                "([-/\\._]?)" + // 时间间隔符(-,/,.,_)
                "(30|[12][0-9]|0?[1-9])" + // 日(30)
                "([\\s]?)" + // 空格
                "((([0-1]?[0-9]|2[0-3]):([0-5]?[0-9]):([0-5]?[0-9]))?))$" + // 时分秒
                "|" + // 或
                // 第三种情况为平年月份是2月28天的。
                "(^\\d{3}[1-9]|\\d{2}[1-9]\\d{1}|\\d{1}[1-9]\\d{2}|[1-9]\\d{3}" + // 年
                "([-/\\._]?)" + // 时间间隔符(-,/,.,_)
                "(0?2)" + // 平年2月
                "([-/\\._]?)" + // 时间间隔符(-,/,.,_)
                "(2[0-8]|1[0-9]|0?[1-9])" + // 日(28)
                "([\\s]?)" + // 空格
                "((([0-1]?[0-9]|2[0-3]):([0-5]?[0-9]):([0-5]?[0-9]))?))$" + // 时分秒
                "|" + // 或
                // 第四种情况为闰年月份是2月29天的。
                // 可以被4整除但不能被100整除的年份。
                // 可以被400整除的数亦是能被100整除,因此后两位是00,所以只要保证前两位能被4整除即可。
                "(^((\\d{2})(0[48]|[2468][048]|[13579][26]))|((0[48]|[2468][048]|[13579][26])00)" + "([-/\\._]?)" + "(0?2)"
                + "([-/\\._]?)" + "(29)" + "([\\s]?)" + "((([0-1]?\\d|2[0-3]):([0-5]?\\d):([0-5]?\\d))?))$" + // 时分秒
                ")";
        ;

        pattern0 = Pattern.compile(datePattern);
        match0 = pattern0.matcher(dateStr);
        flag = match0.matches();
        return flag;
    }

    /**
     * <判断是否满足指定格式的身份证号码>
     *
     * @param idCardStr 需要校验的身份证号码的字符串
     * @return
     */
    public static boolean checkIdCard(String idCardStr) {
        // 身份证号码正则
        String idCardReg = "(^\\d{18}$)|(^\\d{15}$)";
        return idCardStr.matches(idCardReg);
    }

    public static void main(String[] args) {
        boolean result = checkDate("2016/01/-08 ");
        System.out.println(result);
    }


    /**
     * 效验固话
     *
     * @param fixedPhone 固话号码
     * @return 效验结果
     */
    public static boolean checkFixedPhone(String fixedPhone) {
        String reg = "(?:(\\(\\+?86\\))(0[0-9]{2,3}\\-?)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?)|" +
                "(?:(86-?)?(0[0-9]{2,3}\\-?)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?)";
        return Pattern.matches(reg, fixedPhone);
    }

    /**
     * 校验sql是否有关键字
     *
     * @param str sql字符串
     * @return true 代表有 false字表没有
     */
    public static boolean checkSQL(String str) {
        // 统一转为小写
        str = str.toLowerCase();
        String badStr = "\'|\"|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|"
                + "char|declare|sitename|net user|xp_cmdshell|;|or|,|like'|and|exec|execute|insert|create|drop|"
                + "table|from|grant|use|group_concat|column_name|xp_shell|(|)|"
                + "information_schema.columns|table_schema|union|where|select|delete|update|order|count|*|"
                + "chr|mid|master|truncate|char|declare|--|+|,|like|//|/|%|#";// 过滤掉的sql关键字,可以手动添加
        String[] badStrs = badStr.split("\\|");
        for (int i = 0; i < badStrs.length; i++) {
            // 循环检测,判断在请求参数当中是否包含SQL关键字
            if (str.indexOf(badStrs[i]) >= 0 || str.indexOf("\\|\\|") >= 0) {
                return true;
            }
        }
        return false;
    }

    /**
     * 利用正则表达式判断对象是否是数字
     *
     * @param obj 对象
     * @return 是否是数字 是 true 不是 false
     */
    public boolean isNumeric(Object obj) {
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(ConverterUtils.toString(obj));
        if (!isNum.matches()) {
            return false;
        }
        return true;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy