Java 时间验证正则

前言

在开发过程中,常常需要对用户输入的时间进行验证。例如,需要判断用户输入的日期是否符合指定的格式,或者判断用户输入的时间是否在某个范围内。为了方便地进行时间验证,我们可以使用正则表达式。本文将介绍如何使用Java的正则表达式来验证时间,并给出一些常用的时间验证正则表达式示例。

正则表达式基础

正则表达式是一种用于对字符串进行匹配和替换的强大工具。它使用一种模式来描述字符串的特征,并提供了一系列特殊字符来表示不同的字符集合、位置和数量。在Java中,我们可以使用java.util.regex包提供的类来操作正则表达式。

下面是一些常用的正则表达式元字符:

  • .:匹配任意字符(除了换行符)
  • \d:匹配一个数字字符
  • \D:匹配一个非数字字符
  • \w:匹配一个单词字符(包括字母、数字、下划线)
  • \W:匹配一个非单词字符
  • \s:匹配一个空白字符(包括空格、制表符、换行符等)
  • \S:匹配一个非空白字符
  • []:匹配方括号中的任意一个字符
  • ():分组,将多个字符视为一个整体
  • |:分支,匹配|前面或后面的表达式
  • *:匹配前面的表达式零次或多次
  • +:匹配前面的表达式一次或多次
  • ?:匹配前面的表达式零次或一次
  • {n}:匹配前面的表达式恰好n次
  • {n,}:匹配前面的表达式至少n次
  • {n,m}:匹配前面的表达式至少n次、至多m次

时间验证正则表达式示例

日期验证

下面是一些常用的日期验证正则表达式:

  • yyyy-MM-dd:匹配形如"2022-01-01"的日期
  • yyyy/MM/dd:匹配形如"2022/01/01"的日期
  • yyyy.MM.dd:匹配形如"2022.01.01"的日期
  • dd/MM/yyyy:匹配形如"01/01/2022"的日期
  • MM/dd/yyyy:匹配形如"01/01/2022"的日期
  • dd-MM-yyyy:匹配形如"01-01-2022"的日期

例如,我们可以使用以下代码来验证日期是否符合指定的格式:

import java.util.regex.Pattern;

public class DateValidator {
    public static boolean isValid(String date, String pattern) {
        return Pattern.matches(pattern, date);
    }

    public static void main(String[] args) {
        String date = "2022-01-01";
        String pattern = "yyyy-MM-dd";

        boolean isValid = isValid(date, pattern);
        System.out.println(isValid);  // 输出true
    }
}

时间验证

下面是一些常用的时间验证正则表达式:

  • HH:mm:ss:匹配形如"09:30:00"的时间
  • HH:mm:匹配形如"09:30"的时间
  • HH:mm:ss.SSS:匹配形如"09:30:00.000"的时间

例如,我们可以使用以下代码来验证时间是否符合指定的格式:

import java.util.regex.Pattern;

public class TimeValidator {
    public static boolean isValid(String time, String pattern) {
        return Pattern.matches(pattern, time);
    }

    public static void main(String[] args) {
        String time = "09:30:00";
        String pattern = "HH:mm:ss";

        boolean isValid = isValid(time, pattern);
        System.out.println(isValid);  // 输出true
    }
}

类图

下面是DateValidatorTimeValidator类的类图:

classDiagram
    class DateValidator {
        - isValid(date: String, pattern: String): boolean
    }
    class TimeValidator {
        - isValid(time: String, pattern: String): boolean
    }