package cc.cococ.trade.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern; public class FormatValidate
{ // 保存每个月的天数
private static final int[] DAYS_OF_MONTH = { 31, 28, 31, 30, 31, 30, 31,
31, 30, 31, 30, 31 }; // 日历的起始年份
public static final int START_YEAR = 1900; // 日历的结束年份
public static final int END_YEAR = 2100; private static final String ZERO_STRING = "0"; /***************************************************************************
* 匹配英文字母 或者汉字 如"Shenzhen" "深圳"
*
* @param str 待匹配字符串
* @return true 匹配通过 false 匹配失败
*/
public static boolean isValidEnglishOrChinese(String str)
{
// 1、[A-Za-z]* 英文字母的匹配 一次或者多次
// 2、[\u4E00-\u9FA5]* 汉字匹配 一次或者多次
boolean flag = false;
Pattern p = Pattern.compile("^[A-Za-z]*|[\u4E00-\u9FA5]*$");
if (str != null)
{
Matcher match = p.matcher(str);
flag = match.matches();
}
return flag;
} /***************************************************************************
* 匹配英中文姓名 与英文名 英文名格式为:姓与名之间用/隔开 例如Green/Jim King
*
* @param str 待匹配字符串
* @return true 匹配通过 false 匹配失败
*/
public static boolean isValidName(String str)
{
// 1、[A-Za-z]* 英文字母的匹配 一次或者多次
// 2、[\u4E00-\u9FA5]* 汉字匹配 一次或者多次
boolean flag = false;
Pattern p = Pattern
.compile("^([A-Za-z]+[\\/][A-Za-z]+)|[\u4E00-\u9FA5]*");
if (str != null)
{
Matcher match = p.matcher(str);
flag = match.matches();
}
return flag;
} /***************************************************************************
* 验证身份证号码 15位 18位
*
* @param cardStr 身份证字符串
* @return true 合法 false 不合法
*/
public static boolean isValidIdCard(String cardStr)
{
boolean flag = false;
Pattern pEighteen = Pattern.compile("^\\d{17}(\\d{1}|x)$");// 18位身份证号码
// 包括末尾是“x”的校验码
Pattern pFifteen = Pattern.compile("^\\d{15}$");// 15位身份证号码
if (cardStr != null)
{
if (pEighteen.matcher(cardStr).matches()) // 18位身份证号码验证通过
{
if (isValidDate(cardStr.substring(6, 14)))// 18位身份证号码
// 出生年月日验证通过
{
flag = true;
}
}
if (pFifteen.matcher(cardStr).matches()) // 15位身份证号码验证通过
{
if (isValidDay(cardStr.substring(6, 12))) // 15位身份证出身年月日的验证
{
flag = true;
}
}
}
return flag; } /***************************************************************************
* 正整数验证
*
* @param str 待验证字符串
* @return true 验证通过 false 验证失败
*/
public static boolean isValidInteger(String str)
{
boolean flag = false;
Pattern p = Pattern.compile("^\\d*$");
if (str != null)
{
Matcher match = p.matcher(str);
flag = match.matches();
}
return flag;
} /***************************************************************************
* 整数验证(包括正整数与 负整数)
*
* @param str 待验证字符串
* @return true 验证通过 false 验证失败
*/
public static boolean isValidNo(String str)
{
boolean flag = false;
Pattern p = Pattern.compile("^-?\\d*$");
if (str != null)
{
Matcher match = p.matcher(str);
flag = match.matches();
}
return flag;
} /**
* 验证非负整数(正整数+0)
*
* @param str 待验证字符串
* @return true 验证通过 false 验证失败
*/
public static boolean isValidNonNegative(String str)
{
boolean flag = false;
Pattern p = Pattern.compile("^\\d+$");
if (str != null)
{
Matcher match = p.matcher(str);
flag = match.matches();
}
return flag;
} /**
* 验证非负整数(正整数+0)
*
* @param str 待验证字符串
* @return true 验证通过 false 验证失败
*/
public static boolean isValidPositiveInteger(String str)
{
boolean flag = false;
Pattern p = Pattern.compile("^\\d+$");
if (str != null)
{
Matcher match = p.matcher(str);
flag = match.matches();
if(ZERO_STRING.equals(str))
{
flag = false;
}
} return flag;
} /***************************************************************************
* 匹配英文字母(汉语拼音)
*
* @param str 待匹配字符串
* @return true 匹配通过 false 匹配失败
*/
public static boolean isValidEnglish(String str)
{
boolean flag = false;
Pattern p = Pattern.compile("^[A-Za-z]*$");
if (str != null)
{
Matcher match = p.matcher(str);
flag = match.matches();
}
return flag;
} /***************************************************************************
* 匹配英文字母 或者汉字,数字 过滤特殊字符
*
* @param str 待匹配字符串
* @return true 匹配通过 false 匹配失败
*/
public static boolean isValidNonSpecialChar(String str)
{
boolean flag = false;
Pattern p = Pattern.compile("^[A-Za-z\u4E00-\u9FA5\\d]*$");
if (str != null)
{
Matcher match = p.matcher(str);
flag = match.matches();
}
return flag;
} /**
* 验证HH时间格式的时间范围是否大于等于三小时 **注意此方法必须在isValidHour格式验证通过后调用
*
* @param startHour 开始时间 HH
* @param endHour 结束时间HH
* @return true 通过 false 不通过
*/
public static boolean isVaildHourZone(String startHour, String endHour)
{
boolean flag = false;
if (startHour != null && endHour != null)
{
if (isValidHour(startHour) && isValidHour(endHour)) // 格式验证,避免可能抛类型转换异常
{
int sHour = Integer.parseInt(startHour);
int eHour = Integer.parseInt(endHour);
flag = (eHour - sHour >= 3);
}
}
return flag; } /***************************************************************************
* 验证结束时间是否大于开始时间 **注意:此方法必须先调用isValidDate 方法后调用 yyMMdd
*
* @param startDate 开始时间
* @param endDate 结束时间
* @return true 验证通过 false 验证失败
*/
public static boolean isValidTimeZone(String startDate, String endDate)
{
boolean flag = false;
if (startDate != null && endDate != null)
{
if (isValidDate(startDate) && isValidDate(endDate)) // 格式验证,避免可能抛类型转换异常
{
flag = (Integer.parseInt(endDate) > Integer.parseInt(startDate));
}
}
return flag;
} /***************************************************************************
* 验证结束时间是否大于等于开始时间 **注意:此方法必须先调用isValidDate 方法后调用 yyMMdd(包含等于)
*
* @param startDate 开始时间
* @param endDate 结束时间
* @return true 验证通过 false 验证失败
*/
public static boolean isValidTwoTimes(String startDate, String endDate)
{
boolean flag = false;
if (startDate != null && endDate != null)
{
if (isValidDate(startDate) && isValidDate(endDate)) // 格式验证,避免可能抛类型转换异常
{
flag = (Integer.parseInt(endDate) > Integer.parseInt(startDate) || Integer
.parseInt(endDate) == Integer.parseInt(startDate));
}
}
return flag;
} /***************************************************************************
* 验证电话号码 后可接分机号 区号3位或者4位 电话7位或者8位后 后面可加3位或者4位分机号
*
* @param telephoeNo 电话号码字符串
* @return
*/
public static boolean isValidTelephoeNo(String telephoeNo)
{
// 1、\\d{3,4} 区号 3位或者4位的匹配
// 2、\\d{7,8} 号码 7味或者8位的匹配
// 3、(\\d{3,4})? 分机号3位或者4位的匹配 ?可匹配一次或者两次
boolean flag = false;
Pattern p = Pattern.compile("^\\d{3,4}\\d{7,8}(\\d{3,4})?$");
Matcher match = p.matcher(telephoeNo);
if (telephoeNo != null)
{
flag = match.matches();
}
return flag;
} /***************************************************************************
* 验证手机号码
*
* @param telNo 电话号码字符串 130到139 和 150,152 ,157,158,159 ,186,189,187
* @return
*/
public static boolean isValidMobileNo(String mobileNo)
{
// 1、(13[0-9])|(15[02789])|(18[679]) 13段 或者15段 18段的匹配
// 2、\\d{8} 整数出现8次
boolean flag = false;
// Pattern p = Pattern.compile("^(1[358][13567890])(\\d{8})$");
Pattern p = Pattern
.compile("^((13[0-9])|(15[02789])|(18[679]))\\d{8}$");
Matcher match = p.matcher(mobileNo);
if (mobileNo != null)
{
flag = match.matches();
}
return flag;
} /***************************************************************************
* 验证是否是正确的邮箱格式
*
* @param email
* @return true表示是正确的邮箱格式,false表示不是正确邮箱格式
*/
public static boolean isValidEmail(String email)
{
// 1、\\w+表示@之前至少要输入一个匹配字母或数字或下划线 \\w 单词字符:[a-zA-Z_0-9]
// 2、(\\w+\\.)表示域名. 如新浪邮箱域名是sina.com.cn
// {1,3}表示可以出现一次或两次或者三次.
String reg = "\\w+@(\\w+\\.){1,3}\\w+";
Pattern pattern = Pattern.compile(reg);
boolean flag = false;
if (email != null)
{
Matcher matcher = pattern.matcher(email);
flag = matcher.matches();
}
return flag;
} /***************************************************************************
* 验证整点时间格式是否正确 HH格式 时间范围00时~23时
*
* @param hour 时间格式字符串
* @return true表示是正确的整点时间格式,false表示不是正确整点时间格式
*/
public static boolean isValidHour(String hour)
{
boolean flag = false;
String reg = "^[0-2][0-9]$";
Pattern pattern = Pattern.compile(reg);
if (hour != null)
{
Matcher matcher = pattern.matcher(hour);
flag = matcher.matches();
int firstNum = Integer.parseInt(hour.substring(0, 1));
if (flag && firstNum == 2)
{
int secondNum = Integer.parseInt(hour.substring(1, 2));
flag = secondNum < 4; // 时间小于24时
}
}
return flag;
} /***************************************************************************
* 匹配日期格式 yyMMdd 并验证日期是否合法 此方法忽略了闰年的验证 用于15位身份证出生日期的验证
*
* @param dayStr 日期字符串
* @return true 日期合法 false 日期非法
*/
public static boolean isValidDay(String dayStr)
{
Pattern p = Pattern.compile("^\\d{2}\\d{2}\\d{2}$");
Matcher match = p.matcher(dayStr);
if (dayStr != null)
{
if (match.matches()) // 格式验证通过 yyMMdd
{
int month = Integer.parseInt(dayStr.substring(2, 4)); // 月
int day = Integer.parseInt(dayStr.substring(4, 6)); // 日
if (!isValidMonth(month))
{
return false; // 月份不合法
}
if (!(day >= 1 && day <= DAYS_OF_MONTH[month - 1]))
{
return false; // 日期不合法
}
return true;
} return false;
}
else
{
return false;
}
} /***************************************************************************
* 匹配日期格式 yyyyMMdd 并验证日期是否合法
*
* @param date 日期字符串
* @return true 日期合法 false 日期非法
*/
public static boolean isValidDate(String date)
{
// 1、 \\d{4} 年,\\d{2}月,\\d{2}日匹配
Pattern p = Pattern.compile("^\\d{4}\\d{2}\\d{2}$");
Matcher match = p.matcher(date);
if (date != null)
{
if (match.matches()) // 格式验证通过 yyyyMMdd
{
int year = Integer.parseInt(date.substring(0, 4)); // 年
int month = Integer.parseInt(date.substring(4, 6)); // 月
int day = Integer.parseInt(date.substring(6, 8)); // 日
if (!isValidYear((year)))
{
return false; // 年份不在有效年份中
}
if (!isValidMonth(month))
{
return false; // 月份不合法
}
if (!isValidDay(year, month, day))
{
return false; // 日期不合法
}
return true;
} return false;
}
else
{
return false;
}
// return Pattern.matches("", date);
} /**
* 检查year是否在有效的年份范围内 此处验证大于1900年 小于2101年
*
* @param year
* @return
*/
public static boolean isValidYear(int year)
{
return year >= START_YEAR && year <= END_YEAR;
} /**
* 验证月份是否在有效月份内
*
* @param month
* @return
*/
public static boolean isValidMonth(int month)
{
return month >= 1 && month <= 12;
} /**
* 检查天数是否在有效的范围内,因为天数会根据年份和月份的不同而不同 所以必须依赖年份和月份进行检查
*
* @param year
* @param month
* @param day
* @return
*/
public static boolean isValidDay(int year, int month, int day)
{
if (month == 2 && isLeapYear(year))// 闰年且是2月份
{
return day >= 1 && day <= 29;
}
return day >= 1 && day <= DAYS_OF_MONTH[month - 1];// 其他月份
} /**
* 验证是否是闰年
*
* @param year
* @return
*/
public static boolean isLeapYear(int year)
{
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
} /**
* 验证用户名注册是否合法-----------由数字、26个英文字母或者下划线组成的字符串
*
* @param userName
* @return
*/
public static boolean isRegUserName(String userName)
{ String str = "^\\w+$";
boolean flag = true;
if (userName != null)
{
Pattern p = Pattern.compile(str);
Matcher match = p.matcher(userName);
flag = match.matches();
}
return flag;
} }

java---数据格式的验证的更多相关文章

  1. java 数据格式验证类

    作为一个前端,懂一点java,php之类的,甚好. 我所在的项目前端采用的就是java的spring mvc框架,所以我们也写java,掐指一算,也快一年了. 前端而言,验证是一个坎,绕不过去的,前面 ...

  2. 史上最全Java表单验证封装类

    package com.tongrong.utils; import java.util.Collection; import java.util.Map; import java.util.rege ...

  3. Java的登陆验证问题

    java中的登陆验证问题可以有多种方式进行验证,通过拦截器功能完成,可以通过过滤器功能完成,也可以简单的代码在JSP页面中单独完成,其中都 涉及到一个关键的验证步骤,这个验证原理ASP,PHP,JAV ...

  4. java对身份证验证及正则表达式解析

    原文地址:http://www.cnblogs.com/zhongshengzhen/ java对身份证验证及正则表达式解析 package service; import java.text.Par ...

  5. 微信支付java版V3验证数据合法性

    [TOC] 1. 微信支付java版V3验证数据合法性 概要:使用微信支付接口时,微信会返回或回调给商户XML数据,开发者需要验证微信返回的数据是否合法. 特别提醒:商户系统对于支付结果通知的内容一定 ...

  6. Java实现邮箱验证

    Java实现邮箱验证 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开 ...

  7. Java国际化号码验证方法,国内手机号正则表达式

    Java国际化号码验证方法,国内手机号正则表达式 中国电信号段 133.149.153.173.177.180.181.189.199 中国联通号段 130.131.132.145.155.156.1 ...

  8. java 表单验证

    java 表单验证 1.思路:通过表单选择器,表单属性过滤器提取每个表单提交的值,进行验证 2.实现:javascript通过 onSubmit()事件,判断,返回值false不提交,返回true提交 ...

  9. 这是关于FastJson的一个使用Demo,在Java环境下验证的

    public class User { private int id; private String name; public int getId() { return id; } public vo ...

  10. Java Https双向验证

    CA: Certificate Authority,证书颁发机构 CA证书:证书颁发机构颁发的数字证书 参考资料 CA证书和TLS介绍 HTTPS原理和CA证书申请(满满的干货) 单向 / 双向认证 ...

随机推荐

  1. mybatis <sql /> 配置中 返回值 resultType 与resultMap的区别

    mybatis的objectMapper.xml中, 1) 若<sql /> 查询语句中配置的是resultType=“实体类/DTO” ,则从mybatis返回的键值对结果集(Map)会 ...

  2. SO_REUSEADDR 和 SO_REUSEPORT

    大部分内容来自stackoverflow上的回答:Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they m ...

  3. python 暴力破解密码脚本

    python 暴力破解密码脚本 以下,仅为个人测试代码,环境也是测试环境,暴力破解原理都是一样的, 假设要暴力破解登陆网站www.a.com 用户 testUser的密码, 首先,该网站登陆的验证要支 ...

  4. 用NAN简化Google V8 JS引擎的扩展

    通过C++扩展Google V8 JS引擎的文章很多,Google V8 JS带的例子也容易明白.但是大部分文章都是Hello World型的,真正使用时发现处处是坑.扩展V8最经典的例子就是node ...

  5. SPSS中变量的度量标准

    在SPSS中,每一个变量都有一个度量标准,这些度量标准说明变量的含义和属性,会对后续的分析产生影响. 1.名义:名义表示定类变量,定类变量表示事物的类别,只能计算频数和频率,各类别之间没有大小.顺序. ...

  6. Columbia遗留问题

    本来Columbia只是按照顺序,导航不可以点击,数组按照顺序push的小东西 在leader的要求下,要变成导航可以点击,无顺序的一团浆糊,经过了大概长达两天(我是不是太适合做程序!)的反复纠结,浆 ...

  7. 《JavaScript权威指南》读书笔记(二)

    日期:2015-12-04 js 的原型::闭包:闭包这是个相当复杂的东西...现在初步理解:    http://segmentfault.com/a/1190000000652891    闭包有 ...

  8. PHP慕课网教程

    PHP入门篇:http://www.imooc.com/learn/54 3-2 如何定义变量 ”var_dump”函数可以将我们的变量的数据类型(后面小节会做介绍)显示出来. <?php $v ...

  9. MessageDigest简介

    一.概述 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法.信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值. MessageDi ...

  10. 解决qt5在ubuntu下无法调用fcitx输入中文的问题

    如题,在以前安装qt5.2.1的时候就遇到了这个问题.当时上网搜了很多资料,结果都解决不了,发现都是复制来复制去. 这次因为要用qt5.3.0在ubuntu下写个程序,所以不解决这个问题不行了.就继续 ...