当前位置: 首页 > news >正文

JAVA 最常用实用的正则表达式校验

正则表达式校验工具类;

import java.util.regex.Pattern;

/**
 * @Author:JCccc
 * @Description: 常用正则表达式校验工具类
 * @Date: 
 */
public class RegExUtil {
    //纯数字
    public static final String REGEX_NUMBER = "^[0-9]*$";
    //非0开头数字
    public static final String REGEX_NUMBER_NOTZERO = "^(0|[1-9][0-9]*)$";
    //邮箱地址
    public static final String REGEX_EMAIL = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
    //域名
    public static final String REGEX_DOMAIN = "[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?";
    //URL
    public static final String REGEX_URL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
    //IP
    public static final String REGEX_IP_ADDR = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
    //手机号码
    public static final String REGEX_PHONE_NUMBER = "^((17[0-9])|(14[0-9])|(13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
//^[1][2,3,4,5,6,7,8,9][0-9]{9}$"手机号码这个要特别注意,根据时间推移可能会开放新号码段

    //身份证
    public static final String REGEX_ID_CARD = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|" +
            "(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";
    //账号(字母开头,允许5-16字节,允许字母数字下划线)
    public static final String REGEX_ACCOUNT = "^[a-zA-Z][a-zA-Z0-9_]{4,15}$";
    //强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
    public static final String REGEX_PASSWORD = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$";
    //中文(只能输入中文)
    public static final String REGEX_CHINESE = "[\\u4e00-\\u9fa5]+";


    public static boolean isNumber(String value) {

        return Pattern.matches(REGEX_NUMBER, value);
    }
    public static boolean isNumberNotZeroBegin(String value) {

        return Pattern.matches(REGEX_NUMBER_NOTZERO, value);
    }
    //指定多少位数字
    public static boolean isPureNumber(String value, int count) {
        String REGEX_PURE_NUMBER = "^\\d" + "{" + count + "}$";
        return Pattern.matches(REGEX_PURE_NUMBER, value);
    }
    //指定至少多少位数字
    public static boolean isPureNumberLeast(String value, int count) {

        String REGEX_PURE_NUMBER = "^\\d" + "{" + count + ",}$";
        return Pattern.matches(REGEX_PURE_NUMBER, value);
    }
    public static boolean isEmail(String value) {

        return Pattern.matches(REGEX_EMAIL, value);
    }
    public static boolean isDomain(String value) {

        return Pattern.matches(REGEX_DOMAIN, value);
    }
    public static boolean isUrl(String value) {

        return Pattern.matches(REGEX_URL, value);
    }
    public static boolean isIpAddr(String value) {

        return Pattern.matches(REGEX_IP_ADDR, value);
    }
    public static boolean isPhoneNumber(String value) {

        return Pattern.matches(REGEX_PHONE_NUMBER, value);
    }
    public static boolean isAccount(String value) {

        return Pattern.matches(REGEX_ACCOUNT, value);
    }
    public static boolean isPassword(String value) {

        return Pattern.matches(REGEX_PASSWORD, value);
    }
    public static boolean isChinese(String value) {

        return Pattern.matches(REGEX_CHINESE, value);
    }
    public static boolean isIdCard(String value) {
        boolean matches = value.matches(REGEX_ID_CARD);
        if (matches) {

            if (value.length() == 18) {
                try {
                    char[] charArray = value.toCharArray();
                    //前十七位加权因子
                    int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
                    //这是除以11后,可能产生的11位余数对应的验证码
                    String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
                    int sum = 0;
                    for (int i = 0; i < idCardWi.length; i++) {
                        int current = Integer.parseInt(String.valueOf(charArray[i]));
                        int count = current * idCardWi[i];
                        sum += count;
                    }
                    char idCardLast = charArray[17];
                    int idCardMod = sum % 11;
                    if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {
                        return true;
                    } else {
                        System.out.println("身份证最后一位:" + String.valueOf(idCardLast).toUpperCase() +
                                "错误,正确的应该是:" + idCardY[idCardMod].toUpperCase());
                        return false;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("异常:" + value);
                    return false;
                }
            }

        }
        return matches;
    }

    public static void main(String[] args) {

        System.out.println(isNumber("0"));
    }


}

OK,到此。 

相关文章:

  • Springboot 整合WebFlux 实现RESTFUI风格API 及简单的CRUD
  • Springboot 读取配置文件application.properties (yml)的四种方式
  • Springboot 指定获取自己写的配置properties文件的值
  • JAVA AES加密解密工具类
  • Springboot 快速了解 事务回滚@Transactional
  • Springboot Mybatis使用pageHelper实现分页查询
  • JAVA 雪花算法 唯一ID生成工具类
  • 灵魂的拷问 怎么将代码写得让人无法维护?
  • 灵魂的拷问 Hashtable的命名
  • 运行ElasticSearch报错:uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException
  • JAVA 8 Stream 常用操作
  • JAVA 8 Stream优雅使用结合实战分析
  • mysql Error Code: 1175. You are using safe update mode and you tried to update a table without ....
  • SpringBoot 整合WebSocket 简单实战案例
  • Kafka Windows运行错误:找不到或无法加载主类 Files\kafka\kafka_2.12-2.0.0\libs\activation-1.1.1.ja r;C:\Program
  • 【Leetcode】101. 对称二叉树
  • CEF与代理
  • exports和module.exports
  • Facebook AccountKit 接入的坑点
  • Hibernate【inverse和cascade属性】知识要点
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript的使用你知道几种?(上)
  • js
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • k个最大的数及变种小结
  • PAT A1050
  • Promise初体验
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 前端面试之闭包
  • 前端性能优化--懒加载和预加载
  • 网页视频流m3u8/ts视频下载
  • 项目管理碎碎念系列之一:干系人管理
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​​​​​​​​​​​​​​Γ函数
  • $jQuery 重写Alert样式方法
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (AngularJS)Angular 控制器之间通信初探
  • (六)软件测试分工
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十五)使用Nexus创建Maven私服
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)为C# Windows服务添加安装程序
  • *Django中的Ajax 纯js的书写样式1
  • .bat批处理(一):@echo off
  • .net CHARTING图表控件下载地址
  • .NET Core 2.1路线图
  • .net framework profiles /.net framework 配置
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • /etc/fstab和/etc/mtab的区别
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [Angular 基础] - 数据绑定(databinding)