【问题标题】:PHP regular expression to check if MM/DD are within proper rangePHP正则表达式检查MM / DD是否在适当的范围内
【发布时间】:2015-07-14 23:14:16
【问题描述】:

我有一个表单不断向用户抛出错误,因为他们不明白他们的生日必须采用 MM/DD 格式。我不是要求年份,但有些人将其输入为 MM/YY,但没有意识到我想要的是 day 而不是年份。

我试图用正则表达式来做这个,但无法弄清楚,所以我写了这个

$ckdate = explode("/", $mySub['Birthday']);
if($ckdate[0]>12 || $ckdate[0]<1){
    echo 'Please make sure your birthdate is in a valid format MM/DD, we ask for month and day only'; 
    return;
}
if($ckdate[1]>31 || $ckdate[1]<1){
    echo 'Please make sure your birthdate is in a valid format MM/DD, we ask for month and day only'; 
    return;
}

这是最好的方法吗?似乎效率低下。我想知道是否正则表达式是这种方式,还是有一个 PHP 函数可以做到这一点?

提前致谢。

【问题讨论】:

  • 你的混合js和php
  • You don't need regex 对于这个,你这样做的方式可能很好。但是,您使用用户不期望的格式造成了这个问题。 You're making them think!
  • 2 位数的月份和 2 位数的年份之间存在重叠,两者都可能有效。你怎么能分辨出来?月和日都使用投递箱可能会更好。
  • 另一种方法是重新设计表单以提高可用性。例如,您可以输入一个带有“月”和“年”的占位符。永远不要假设用户会以你的方式思考。发现错误固然好,但最好从一开始就防止错误发生。
  • 感谢大家的输入。感谢您确认我不需要正则表达式。我确实有一个 jquery datepicker,但它不工作。一旦我重新启用它,它应该会有所帮助,这就是 nomistic 的观点,即首先防止错误发生。但是下面带有 checkdate 的答案也可以用于验证。待机...

标签: php regex date


【解决方案1】:

您可以使用checkdate() 并输入一个虚拟年份。例如:checkdate($m, $d, 2000)

注意:您可能希望使用闰年作为虚拟年,这样 2 月 29 日出生的人就不会被冷落。

【讨论】:

  • 很好的建议。这减少了我的代码并使其更清洁。现在我只需要一个 if 语句。
  • 是的,请始终尝试使用内置功能,因为它不易出错,而且您不必复制该功能。
猜你喜欢
  • 2011-07-11
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
相关资源
最近更新 更多