如何将标准正则表达式转换为 php 正则表达式? [复制]

Posted

技术标签:

【中文标题】如何将标准正则表达式转换为 php 正则表达式? [复制]【英文标题】:How to convert standard regex to php regex? [duplicate] 【发布时间】:2013-09-11 12:17:22 【问题描述】:

在网上搜索验证时间为“HH:MM:SS”后,我发现了这个: Regex pattern for HH:MM:SS time string。但是当我把它放在我的 php 代码中时,我得到了一个错误:

preg_match("^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$", "12:33:51", $matches);

这是我的错误信息

警告:preg_match():在第 128 行的 db-dataitem.php 中找不到结束分隔符 '^'

如何更改模式字符串以使其适用于 PHP?

【问题讨论】:

【参考方案1】:

日期时间解决方案

您可以使用DateTime::createFromFormat 验证所有日期/时间字符串:

功能

function isTimeValid($time, $format = 'H:i:s') 
    $dt = DateTime::createFromFormat($format, $time);
    return $dt && $dt->format($format) == $time;

此函数可用于所有日期时间组合验证。 Examples

示例

foreach (['12:30:54', '13:30:65', '00:00:00', '00:70:00'] as $time) 
    echo "Time '$time' is " . (isTimeValid($time) ? "" : "not ") . "valid.\n";

示例输出

Time '12:30:54' is valid.
Time '13:30:65' is not valid.
Time '00:00:00' is valid.
Time '00:70:00' is not valid.

【讨论】:

我就是喜欢这个解决方案,合适的工具,合适的工作!另外,我今天学到了一些东西! 谢谢,我投票给你,这解决了我的问题,但我必须给与问题相关的正确答案打分。 @EhsanErshadi:ofc。如果您需要其他类型的日期时间验证,您可以使用此功能。 Examples. @Glavić 似乎你玩过很多 datetime :) +1 @swapnesh:呵呵,是的;)我有很多与日期时间相关的项目;)【参考方案2】:

你应该添加一个分隔符:

preg_match("/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/", "12:33:51", $matches);

-in PHP 模式应该是 to be delimited 来自修饰符。该分隔符应该是非字母数字。

但是(正如在另一个很好的答案中所做的那样) - 最好使用适当的工具来解决您的问题 - 即通过 DateTime API 验证时间戳

【讨论】:

以上是关于如何将标准正则表达式转换为 php 正则表达式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何最好地使用正则表达式将层次文本文件转换为 XML?

如何转换使用 Lookahead 的正则表达式模式?

如何将 javascript 正则表达式转换为安全的 Java 正则表达式?

如何将 C# 正则表达式转换为打字稿正则表达式?

如何将 DFA 转换为正则表达式?

如何在 PHP 中使用正则表达式转换标记 (\u \l \U \L \E)?