在 PHP 中创建 MM/DD/YYYY 日期正则表达式

Subodh Poudel 2022年5月14日
在 PHP 中创建 MM/DD/YYYY 日期正则表达式

本教程将演示在 PHP 中为 mm/dd/yyyy 日期格式创建正则表达式的方法。

在 PHP 中创建 MM/DD/YY 日期正则表达式

我们可以使用正则表达式根据表达式中应用的规则来验证用户输入。我们可以使用正则表达式验证任何输入,我们甚至可以使用正则表达式验证 mm/dd/yyyy 日期格式。

我们可以创建一个正则表达式并将其存储在一个变量中。我们将使用 preg_match() 函数通过正则表达式测试随机日期格式输入。

日期格式 mm/dd/yyyy 的正则表达式模式如下所示。我们将详细讨论它。

~(0[1-9]|1[012])[-/](0[1-9]|[12][0-9]|3[01])[-/](19|20)\d\d~

正则表达式模式应该始终有一个正确的分隔符。此处,~ 符号是围绕模式的分隔符。

接下来,我们必须在 mm/dd/yyyy 中写入月份的格式。

月份以 01-12 的格式表示。因此,月份的第一个数字可以是 01,所以我们写 0[1-9] 表示从 01-09 开始的月份。括号内的 1-9 表示写在 0 之后的数字。

同样,我们只能写 101112 表示月份,从 1 开始。因此,我们在 1 的括号内写了 0121[012]

我们使用|符号来实现逻辑 OR。所以我们用它来分隔规则为 (0[1-9]|1[012])

最后,我们用括号将模式括起来以指示部分的结束。

接下来,我们必须以 mm/dd/yyyy 格式设置分隔符规则。上面的模式允许分隔符 -/.

现在,我们写了几天的模式。天数是 1-30,所以天数 01-09 可以写成 0[1-9]10-29 可以写成 12[0-9],以及天数 30-31 可以写成 3[01]

我们对日期之后的分隔符使用相同的规则,格式为 mm/dd/yyyy

我们将 19|20 写为年份的前两位数字,这意味着年份只能从 1920 开始。我们在 19|20 之后使用模式\d\d 来表示 1920 之后的任何两位数字。

这就是上述正则表达式的工作原理。我们现在可以使用上面的正则表达式检查一些测试日期格式。

为此,创建一个变量 $reg 并将我们上面写的正则表达式存储在其中。接下来,创建一个数组 $dates 并存储这些随机日期格式。

['03/22/2021', '22/22/2021', '03\22\2021', '03-22-2021', '03/22/1865']

然后,使用 foreach 循环将 $dates 变量循环为 $date。使用 preg_match() 函数比较 $date 变量和 $reg 变量。

通过这样做,我们可以检查测试输入是否符合 mm/dd/yyyy 格式的正则表达式模式。

示例代码:

$reg = '~(0[1-9]|1[012])[-/](0[1-9]|[12][0-9]|3[01])[-/](19|20)\d\d~';

$dates =['03/22/2021', '22/22/2021', '03\22\2021', '03-22-2021', '03/22/1865'] ;
foreach($dates as $date){
 if(!preg_match($reg, $date)) {
 echo 'the date format '.$date.' is incorrect'."<br>"; 
 } else{
 echo 'the date format '.$date.' is correct'."<br>";
 } 
}

输出:

the date format 03/22/2021 is correct
the date format 22/22/2021 is incorrect
the date format 03\22\2021 is incorrect
the date format 03-22-2021 is correct
the date format 03/22/1865 is incorrect

在这里,第一种格式遵循所有规则。第二种格式不正确,因为月份不能是 22

第三个是不正确的,因为我们没有指定 \ 分隔符。我们已经指定了 - 分隔符,所以第四个日期是正确的。年份是最后一年的 1800s,所以它是不正确的。

作者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

相关文章 - PHP Date

相关文章 - PHP Regex