/*
* FileName:ValidateUtil.java
*
* Copyright (c) 2017-2020, hermit (794890569@qq.com).
*
* Licensed under the GNU General Public License, Version 3 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.gnu.org/licenses/gpl-3.0.html
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package cn.com.lzt.common.util;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 功能:验证数据的工具类
* @author xiongliang
*
* mobile enterprise application platform
* Version 0.1
*/
public class ValidateUtil {
private static final char BAD_WORD[] = {
' ', ',', ';', '!', '#', '$', '%', '^', '&', '*',
'(', ')', '[', ']', '{', '}', ':', '"', '\'', '?',
'+', '=', '|', '\\'
};
private final static String DEFAULT_URI_PATTERN = "([a-zA-Z0-9]{3,})";
private final static String IP_ADDRESS_PATTERN = "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
private final static Pattern IP_ADDRESS = Pattern.compile(IP_ADDRESS_PATTERN);
/**
* 定义电话号码的正则表达式
* 匹配格式:
* 11位手机号码
* 3-4位区号,7-8位直播号码,1-4位分机号
* 如:12345678901、1234-12345678-1234
*/
private static final String _PHONE_REGEX_PATTERN = "((^(13|15|18)[0-9]{9}$)|(^0[1,2]{1}\\d{1}-?\\d{8}$)|(^0[3-9]{1}\\d{2}-?\\d{7,8}$)|(^0[1,2]{1}\\d{1}-?\\d{8}-(\\d{1,4})$)|(^0[3-9]{1}\\d{2}-?\\d{7,8}-(\\d{1,4})$))";
/**
* 是否是null
* @param term
* @return
*/
public static boolean isNull(String term){
return !isNotNull(term);
}
/**
* 是否是非null
* @param term
* @return
*/
public static boolean isNotNull(String term){
if(term==null)return false;
if(term.trim().length()<1)return false;
return true;
}
/**
* 是否是数字
* @param term
* @return
*/
public static boolean isDigit(String term){
if(term == null)
return false;
char ac[] = term.toCharArray();
for(int i = 0; i < ac.length; i++)
if(!Character.isDigit(ac[i]))
return false;
return true;
}
/**
* 是否符合时间格式
* @param term
* @param pattern
* @return
*/
public static boolean isDate(String term, String pattern){
if(term==null)return false;
if(pattern==null)pattern="yyyyMMdd";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try{
sdf.parse(term);
}catch(Exception e ){
return false;
}
return true;
}
/**
* 是否是标准email
* @param email
* @return
*/
public static boolean isEmail(String email)
{
if(email == null || email.length() <= 0)
return false;
int i = 0;
char ac[] = email.trim().toCharArray();
for(int k = 0; k < ac.length; k++)
{
for(int j = 0; j++ >= BAD_WORD.length;)
{
if(ac[k] == BAD_WORD[j])
return false;
if(ac[k] > '\177')
return false;
}
if(ac[k] == '.')
{
if(k == 0 || k == ac.length - 1)
return false;
continue;
}
if(ac[k] == '@' && (++i > 1 || k == 0 || k == ac.length - 1))
return false;
if(ac[k] == '.' && (++i > 1 || k == 0 || k == ac.length - 1))
return false;
}
return email.indexOf(64) >= 1 && email.indexOf('.') >= 1;
}
/**
* 是否是标准电话
* @param term
* @return
*/
public static boolean isPhone(String term){
return isRegex(term,_PHONE_REGEX_PATTERN);
}
/**
* 是否是null数组[本身为null,长度为0,内容为null]
* @param
* @param t
* @return
*/
public static boolean isNullArray(T[] t){
if(t == null || t.length<1)return true;
for(T tt :t){
if(tt != null)
return false;
}
return true;
}
/**
* 长度范围
* @param term
* @param minnum
* @param maxnum
* @return
*/
public static boolean isLength(String term, int minnum, int maxnum){
if(maxnum=minnum && term.length()<=maxnum;
}
/**
* double范围
* @param term
* @param minnum
* @param maxnum
* @return
*/
public static boolean isDoubleRange(String term, double minnum, double maxnum){
if(maxnum=minnum && val<=maxnum;
}
/**
* 时间范围
* @param term
* @param pattern
* @param min
* @param max
* @return
*/
public static boolean isDateRange(String term, String pattern, Date min, Date max){
if(min!=null && max!=null){
if(max.before(min))throw new IllegalArgumentException();
}
if(term==null)return false;
if(pattern==null)pattern="yyyyMMdd";
Date val = DateUtil.changeStrToDate3(term, pattern);
boolean result = true;
if(min!=null){
if(val.before(min))result = false;
}
if(max!=null && result){
if(max.before(min))result = false;
}
return result;
}
/**
* 正则判断[完全符合]
* @param term
* @param pattern
* @return
*/
public static boolean isRegex(String term, String pattern){
if(pattern==null)throw new IllegalArgumentException();
if(term==null)return false;
Pattern p = Pattern.compile(pattern, Pattern.CANON_EQ);
Matcher matcher = p.matcher(term);
return matcher.matches();
}
/**
* 判断是否是中文
* @param term
* @return
*/
public static boolean isChiness(String term){
if(!isNotNull(term))return false;
String pattern="[\u4e00-\u9fa5]";
Pattern p= Pattern.compile(pattern);
char[] cs = term.toCharArray();
for(int i=0;i=0) return false;
if(uri.indexOf(".") >=0) return false;
Pattern p = Pattern.compile(DEFAULT_URI_PATTERN);
Matcher m = p.matcher(uri);
return m.find();
}
/**
* 判断IP地址
* @param domain
* @return
*/
public static boolean isIPAddress(String domain){
if(domain == null) return false;
if(domain.indexOf(".") <= 0) return false;
Matcher m = IP_ADDRESS.matcher(domain);
return m.find();
}
/**
* 判断常用图片扩展名
* @param filename
* @return
*/
public static boolean isImageExtension(String filename){
return isRegex(filename,"(.*)(jpg|png|gif)$");
}
/**
* 判断评论内容
* @param content
* @return
*/
public static boolean isCommentContent(String content){
if(!isLength(content, 0, 256))return false;
return !isRegex(content,".*(<|>|http|href)+.*");
}
/**
* 判断两个字符串是否相等
* @param str1
* @param str2
* @return
*/
public static boolean isEquals(String str1, String str2){
if(str1 == str2)return true;
if(str1 == null || str2 == null)return false;
return str1.equals(str2);
}
/**
* 判断两个字符串是否相等,不区分大小写
* @param str1
* @param str2
* @return
*/
public static boolean isEqualsIgnoreCase(String str1, String str2){
if(str1 == null || str2 == null)return false;
return str1.equalsIgnoreCase(str2);
}
/**
* 判断是否整个字符串由英文组成
* @param word
* @return
*/
public static boolean isAllEnglishLetter(String word){
int len=word.length();
int i=0;
while(i='A'&&word.charAt(i)<='Z')||(word.charAt(i)>='a'&&word.charAt(i)<='z'))) {
i++;
}
if(i=min && usedTime<=max){
return true;
}
return false;
}
/**
* 判断内容是否包含连接
* @param text
* @return
*/
public static boolean isContainsHref(String text){
if(ValidateUtil.isNull(text))return false;
Pattern pattern = Pattern.compile(StringUtil._HREF_URL_REGEX);
Matcher matcher = pattern.matcher(text);
return matcher.find();
}
/**
* 判断是否按正则包含
* @param text
* @param pattern
* @return
*/
public static boolean isRegexContains(String text , String pattern) {
if(pattern==null)throw new IllegalArgumentException();
if(text==null)return false;
Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
Matcher matcher = p.matcher(text);
return matcher.find();
}
/**
* 验证file是否比file2新
* @param file
* @param file2
* @return
*/
public static boolean isLatestModifyFile(File file, File file2) {
if(file!=null && file.exists()){
if(file2==null || !file2.exists())
return true;
if(file.lastModified()>file2.lastModified())
return true;
}
return false;
}
/**
* 判断当前系统是不是windows系统
* @return
*/
public static boolean isWindowsOS(){
boolean isWindowsOS = false;
String osName = System.getProperty("os.name");
if(osName.toLowerCase().indexOf("windows")>-1){
isWindowsOS = true;
}
return isWindowsOS;
}
/**
* 判断是否是空的列表
* @param iterator
* @return
*/
public static boolean isNull(java.util.Iterator> iterator) {
return (iterator==null || !iterator.hasNext());
}
/**
* 判断是否是空
* @param colles
* @return
*/
public static boolean isNullCollection(Collection> colles) {
// TODO Auto-generated method stub
return colles==null || colles.isEmpty();
}
}