【问题标题】:PHP validate CRON with Regex [duplicate]PHP使用正则表达式验证CRON [重复]
【发布时间】:2012-10-08 15:40:27
【问题描述】:

可能重复:
Validating Crontab Entries w/ PHP

我到处都有搜索,而且我的正则表达式很差,所以我寻求帮助。

我正在构建一个基于 Web 的 CRON 工具,表单可以而且只会将以下内容传递给处理脚本。'0-99' ',' '*' '-' '/'

我想在 PHP 中使用简单的 preg_match 来验证输入,但似乎无法提出正确的正则表达式。有人可以帮忙吗? 此外,我将验证 cron 中的每个项目,即 NOT * * * * * 而是分钟值,然后是小时值等。这允许发回更具体的错误。

传递值的示例是

*
0,10
*/5
1,3,5
1-5

这是一个糟糕的尝试,只是匹配数字和 * /[0-9*]/ 任何帮助都会很棒。

问候

【问题讨论】:

  • "you will validate" - 你的意思是正则表达式应该进行验证,还是你在正则表达式匹配后才这样做?如果是前者,那么我们需要更多关于允许/禁止什么的信息。你的例子不足以推断这一点。另外,您所说的0-99 是指允许的数字范围,因此不应匹配100
  • 对,我已经完成了使用 PHP 验证 Crontab 条目。链接,它只是没有让我得到我需要的东西。
  • 在验证方面,我的意思是使用正则表达式匹配从表单传递的字符串。该字符串将根据上面的任何示例,实际上在仔细检查时,要匹配的数字当然只会从 0 到每月每天最多 31 个

标签: php regex cron


【解决方案1】:

让我们看看:

$pattern = '/^(?:[1-9]?\d|\*)(?:(?:[\/-][1-9]?\d)|(?:,[1-9]?\d)+)?$/';

此模式将允许您匹配有效 CRON 句子的合理子集。它确实与您的每一个示例都匹配。不过,确切的模式取决于您定义的语法。

编辑
忘了提到单独的正则表达式匹配不会削减它。它可以做的是检查输入在(您的简化)语法方面是否正确。除此之外,您还需要根据语义验证输入(例如,0-23 小时;1-30/1 天等)。

【讨论】:

  • 是的,根据我给出的样本,这种模式似乎对单个 CRON 模式非常有效。不错!
猜你喜欢
  • 2013-05-02
  • 2011-05-11
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 2019-04-29
相关资源
最近更新 更多