package com.gkzy.academic.utils;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** 提供验证邮箱、手机号、电话号码、身份证号码、数字等方法*/
public final class RegexUtil {/*** 手机号码,中间4位星号替换** @param phone 手机号* @return 星号替换的手机号*/public static String phoneNoHide(String phone) {// 括号表示组,被替换的部分$n表示第n组的内容// 正则表达式中,替换字符串,括号的意思是分组,在replace()方法中,// 参数二中可以使用$n(n为数字)来依次引用模式串中用括号定义的字串。// "(\d{3})\d{4}(\d{4})", "$1****$2"的这个意思就是用括号,// 分为(前3个数字)中间4个数字(最后4个数字)替换为(第一组数值,保持不变$1)(中间为*)(第二组数值,保持不变$2)return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");}/*** 银行卡号,保留最后4位,其他星号替换** @param cardId 卡号* @return 星号替换的银行卡号*/public static String cardIdHide(String cardId) {return cardId.replaceAll("\\d{15}(\\d{3})", "**** **** **** **** $1");}/*** 身份证号,中间10位星号替换** @param id 身份证号* @return 星号替换的身份证号*/public static String idHide(String id) {return id.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1** **** ****$2");}/*** @param vehicleNo 车牌号* @return 是否为车牌号*/public static boolean checkVehicleNo(String vehicleNo) {Pattern pattern = Pattern.compile("^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{5}$");return pattern.matcher(vehicleNo).find();}/*** 验证身份证号码** @param idCard 居民身份证号码15位或18位,最后一位可能是数字或字母* @return 验证成功返回true,验证失败返回false*/public static boolean checkIdCard(String idCard) {String regex = "[1-9]\\d{13,16}[a-zA-Z0-9]{1}";return Pattern.matches(regex, idCard);}/*** 验证手机号码(支持国际格式,+86135xxxx...(中国内地),+00852137xxxx...(中国香港))** @param mobile 移动、联通、电信运营商的号码段*               <p>移动的号段:134(0-8)、135、136、137、138、139、147(预计用于TD上网卡)*               、150、151、152、157(TD专用)、158、159、187(未启用)、188(TD专用)</p>*               <p>联通的号段:130、131、132、155、156(世界风专用)、185(未启用)、186(3g)</p>*               <p>电信的号段:133、153、180(未启用)、189</p>* @return 验证成功返回true,验证失败返回false*/public static boolean checkMobile(String mobile) {String regex = "(\\+\\d+)?1[34578]\\d{9}$";return Pattern.matches(regex, mobile);}/*** 验证固定电话号码** @param phone 电话号码,格式:国家(地区)电话代码 + 区号(城市代码) + 电话号码,如:+8602085588447*              <p><b>国家(地区) 代码 :</b>标识电话号码的国家(地区)的标准国家(地区)代码。它包含从 0 到 9 的一位或多位数字,*              数字之后是空格分隔的国家(地区)代码。</p>*              <p><b>区号(城市代码):</b>这可能包含一个或多个从 0 到 9 的数字,地区或城市代码放在圆括号——*              对不使用地区或城市代码的国家(地区),则省略该组件。</p>*              <p><b>电话号码:</b>这包含从 0 到 9 的一个或多个数字 </p>* @return 验证成功返回true,验证失败返回false*/public static boolean checkPhone(String phone) {String regex = "(\\+\\d+)?(\\d{3,4}\\-?)?\\d{7,8}$";return Pattern.matches(regex, phone);}/*** 验证Email** @param email email地址,格式:zhangsan@sina.com,zhangsan@xxx.com.cn,xxx代表邮件服务商* @return 验证成功返回true,验证失败返回false*//*public static boolean checkEmail(String email) {String regex = "\\w+@\\w+\\.[a-z]+(\\.[a-z]+)?";return Pattern.matches(regex, email);}*///判断email格式是否正确public static boolean isEmail(String email) {String str = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";Pattern p = Pattern.compile(str);Matcher m = p.matcher(email);return m.matches();}/*** 验证整数(正整数和负整数)** @param digit 一位或多位0-9之间的整数* @return 验证成功返回true,验证失败返回false*/public static boolean checkDigit(String digit) {String regex = "\\-?[1-9]\\d+";return Pattern.matches(regex, digit);}/*** 验证整数和浮点数(正负整数和正负浮点数)** @param decimals 一位或多位0-9之间的浮点数,如:1.23,233.30* @return 验证成功返回true,验证失败返回false*/public static boolean checkDecimals(String decimals) {String regex = "\\-?[1-9]\\d+(\\.\\d+)?";return Pattern.matches(regex, decimals);}/*** 验证空白字符** @param blankSpace 空白字符,包括:空格、\t、\n、\r、\f、\x0B* @return 验证成功返回true,验证失败返回false*/public static boolean checkBlankSpace(String blankSpace) {String regex = "\\s+";return Pattern.matches(regex, blankSpace);}/*** 验证中文** @param chinese 中文字符* @return 验证成功返回true,验证失败返回false*/public static boolean checkChinese(String chinese) {String regex = "^[\u4E00-\u9FA5]+$";return Pattern.matches(regex, chinese);}/*** 验证日期(年月日)** @param birthday 日期,格式:1992-09-03,或1992.09.03* @return 验证成功返回true,验证失败返回false*/public static boolean checkBirthday(String birthday) {String regex = "[1-9]{4}([-./])\\d{1,2}\\1\\d{1,2}";return Pattern.matches(regex, birthday);}/*** 验证URL地址** @param url 格式:http://blog.csdn.net:80/xyang81/article/details/7705960? 或 http://www.csdn.net:80* @return 验证成功返回true,验证失败返回false*/public static boolean checkURL(String url) {String regex = "(https?://(w{3}\\.)?)?\\w+\\.\\w+(\\.[a-zA-Z]+)*(:\\d{1,5})?(/\\w*)*(\\??(.+=.*)?(&.+=.*)?)?";return Pattern.matches(regex, url);}/*** 匹配中国邮政编码** @param postcode 邮政编码* @return 验证成功返回true,验证失败返回false*/public static boolean checkPostcode(String postcode) {String regex = "[1-9]\\d{5}";return Pattern.matches(regex, postcode);}/*** 匹配IP地址(简单匹配,格式,如:192.168.1.1,127.0.0.1,没有匹配IP段的大小)** @param ipAddress IPv4标准地址* @return 验证成功返回true,验证失败返回false*/public static boolean checkIpAddress(String ipAddress) {String regex = "[1-9](\\d{1,2})?\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))";return Pattern.matches(regex, ipAddress);}/*** 判断字符串中是否包含Emoji表情(待优化)* @param str   判断的字符串* @return  true:包含   false:不包含*/public static boolean containsEmoji(String str) {int len = str.length();for (int i = 0; i < len; i++) {if (isEmojiCharacter(str.charAt(i))) {return true;}}return false;}/*** 判断表情的正则表达式* ((codePoint >= 0x20) && codePoint <= 0xD7FF))  这个会把中文标点符号判断为表情* @param codePoint* @return*/private static boolean isEmojiCharacter(char codePoint) {return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && codePoint <= 0xD7FF))|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));}/*** 判断字符串中是否包含Emoji表情* @param source   判断的字符串* @return  true:包含   false:不包含*/public static boolean noContainsEmoji(String source) {int len = source.length();boolean isEmoji = false;for (int i = 0; i < len; i++) {char hs = source.charAt(i);if (0xd800 <= hs && hs <= 0xdbff) {if (source.length() > 1) {char ls = source.charAt(i + 1);int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;if (0x1d000 <= uc && uc <= 0x1f77f) {return true;}}} else {// non surrogateif (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) {return true;} else if (0x2B05 <= hs && hs <= 0x2b07) {return true;} else if (0x2934 <= hs && hs <= 0x2935) {return true;} else if (0x3297 <= hs && hs <= 0x3299) {return true;} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d|| hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c|| hs == 0x2b1b || hs == 0x2b50 || hs == 0x231a) {return true;}if (!isEmoji && source.length() > 1 && i < source.length() - 1) {char ls = source.charAt(i + 1);if (ls == 0x20e3) {return true;}}}}return isEmoji;}}

校验-------邮箱、手机号、电话号码、身份证号码、数字等工具类相关推荐

  1. BankCardUtils(根据银行卡号 获取 银行卡类型、银行名称和银行编码 自动格式化银行卡号、手机号、身份证号输入的工具类)

    BankCardUtils 根据银行卡号 获取 银行卡类型.银行名称和银行编码 自动格式化银行卡号.手机号.身份证号输入的工具类 效果图 特点 支持自动根据银行卡号获取出银行名称.银行编码.银行卡类型 ...

  2. BankCardUtils 根据银行卡号 获取 银行卡类型、银行名称和银行编码 自动格式化银行卡号、手机号、身份证号输入的工具类

    BankCardUtils 项目地址:nanchen2251/BankCardUtils  简介:根据银行卡号 获取 银行卡类型.银行名称和银行编码 自动格式化银行卡号.手机号.身份证号输入的工具类 ...

  3. js常见正则验证:邮箱 手机号 电话号码 账号 去掉空格 身份证

    常见正则验证:邮箱 手机号 电话号码 账号 这个博主没什么文采,废话不少说,直接来正文,往下看啊. 检测:电话号码 /* 检测:电话号码验证规则:区号+号码如:01022446688 010-4567 ...

  4. js正则表达式校验:手机号、身份证、护照、港澳台通行证、银行卡号、车牌号等......

    js正则表达式校验:手机号.身份证.护照.港澳台通行证.银行卡号等...... 1.手机号 2.身份证号 3.护照 4.港澳台通行证.居住证 5.银行卡号 6.军官证 7.户口本 8.用户名.中文姓名 ...

  5. 在线身份证号码提取生日工具

    在线身份证号码提取生日工具 在线身份证号码提取生日工具 工具支持从身份证号码列表中批量读取生日,并同时计算出阳历生日等信息,支持导出到Excel中,数据纯客户端计算,不会上传到服务器,请放心使用. h ...

  6. aliyun短信服务包含随机生成四位数字验证码工具类

    .1.pom文件 <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sd ...

  7. 正则表达式校验邮箱号、手机号、身份证号码等等

    正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的 字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地 用极简单的方式达到字符串的复杂控 ...

  8. 【自用笔记】 手机号和 身份证号码校验

    /*** 检查手机号是否合法** @param phone* @return boolean*/ public static boolean isPhone(String phone) {//正则表达 ...

  9. 常用的一些校验规则(手机号,身份证号等)

    校验规则我们经常用到,强业务性的校验很少有通用的库可以使用,一般都是搜索之后copy一个,但搜到的方法良莠不齐,各种实现方式都有,长期累积下来代码一致性可读性会非常差. 于是自己实现了一些,主要目标是 ...

  10. JS身份证号码校验,JS根据身份证号码获取出生年月日,JS根据出生年月日获取年龄,JS根据身份证号码获取性别

    目录 1.JS身份证号码校验 2.JS根据身份证号码获取出生年月日 3.JS根据出生年月日获取年龄 4.JS根据身份证号码获取性别 1.JS身份证号码校验 /*** 身份证校验** @export* ...

最新文章

  1. 【×××系列八】Dynamic Multipoint *** for IPv6 详解
  2. 哥哥,请原谅妹妹的自私!妹妹想做你的新娘...超级感人
  3. AOSCP4.1.2 红米Note 4X 2017/10/13 非官方 稳定发布
  4. GARFIELD@11-10-2004
  5. 什么流读取MultipartFile_深入理解并运用Node中的IO模型流
  6. CSS快速入门-箭头和图标
  7. arm 开发工具比较(ADS vs RealviewMDK vs RVDS)
  8. html点击图片放大_vue 插件之picture-markert图片标注
  9. 智慧环卫管理系统解决方案
  10. Docker 镜像地址修改
  11. vb.net 模拟鼠标 失去焦点_DNF:都9102年了还在手动点竹子?鼠标连点器了解一下...
  12. 自动驾驶-MPC控制器
  13. 开平方算法的C++实现
  14. android动态指示箭头,android – 自定义选项卡指示器(箭头像指示器)
  15. 兼容 iOS retina 高清屏
  16. NGUI字体制作(UIFont)
  17. 微信程序开发系列教程(二)微信订阅号+人工智能问答服务
  18. excel拆分表格之多条件拆分
  19. 微信公众平台开发之签到积分查询功能
  20. 利用python爬取京东平台评论及图片并进行分析

热门文章

  1. 视频贴片广告有哪些形式,视频贴片广告展示形式如何?
  2. 【Nginx之轨迹】Nginx + Lua 实现 waf Web 应用防火墙(解决 nignx 加载失败问题:LuaJIT version which is not OpenResty‘s)
  3. 数码相框(十六、LCD显示JPG格式图片)
  4. 计算机的所有符号,电脑上怎么打各种符号
  5. android 自定义圆点,Android自定义带圆点的半圆形进度条
  6. 2021年氧化工艺报名考试及氧化工艺模拟试题
  7. 图像分辨率和图像大小的计算
  8. JavaScript之promise对象及ajax的使用
  9. web页面跳转支付宝网页支付
  10. 利用梳状函数求解周期函数傅里叶变换