function validateDate( $date )
{
echo $date;
//2012-08-24 20:30:00
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1)
{
return true;
}
else
{
return false;
}
}
这总是返回false。我使用了唯一的工具来构建正则表达式,它在那里工作得很好。当我在正则表达式中添加“/”时,问题开始了。不知何故PHP似乎需要这些,但我不知道为什么,我不知道为什么它打破了我的正则表达式。
它应该返回TRUE的东西。像"2012-08-24 20:30:00"和FALSE的"asdf2012-08-24 20:30:00asdf"或任何不符合我的正则表达式
提前谢谢!
-----------------------编辑谢谢你的所有答案!
正如一些用户指出的那样,对于示例日期“2012-08-24 20:30:00”,我的函数返回true。但是,只有当我手动设置$date='2012-08-24 20:30:00'时,它才会这样做。如果我使用完全相同的字符串调用代码中其他地方的函数,它将返回false。有人知道为什么吗?
-----------------------编辑
是的,很抱歉浪费了您的时间,事实上,字符串中添加了一些空格。在调用my函数之前在my date上使用trim()现在可以得到正确的结果。
谢谢大家!
这应该工作得更好,写得更简单:
function validateDate($date)
{
return preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date);
}
但是,如其他人所述,9999-99-99 29:59:59
将返回true。。。
从PHP手册中,您可以轻松找到更优雅、更可靠的解决方案,例如(受此评论启发):
function validateDate($data)
{
return (date('Y-m-d H:i:s', strtotime($data)) == $data);
}
为我返回true
。请尝试使用以下正则表达式:
function validateDate($date) {
echo $date;
if( !preg_match("/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/",$date,$m)) return false;
if( !checkdate($m[1],$m[2],$m[0])) return false;
if( $m[3] > 23) return false;
if( $m[4] > 59) return false;
if( $m[5] > 59) return false;
return true;
}
在正则表达式中验证格式,然后使用目标函数验证内容,比在正则表达式中尝试执行所有操作更容易。
为什么要使用正则表达式?使用DateTime类。
function validateDate($date, $format = 'Y-m-d H:i:s')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
您可以将此函数用于所有类型的日期/时间验证。示例:
var_dump(validateDate('2012-02-28 12:12:12')); # true
var_dump(validateDate('2012-02-30 12:12:12')); # false
var_dump(validateDate('2012-02-28', 'Y-m-d')); # true
var_dump(validateDate('28/02/2012', 'd/m/Y')); # true
var_dump(validateDate('30/02/2012', 'd/m/Y')); # false
var_dump(validateDate('14:50', 'H:i')); # true
var_dump(validateDate('14:77', 'H:i')); # false
var_dump(validateDate(14, 'H')); # true
var_dump(validateDate('14', 'H')); # true
var_dump(validateDate('2012-02-28T12:12:12+02:00', 'Y-m-d\TH:i:sP')); # true
# or
var_dump(validateDate('2012-02-28T12:12:12+02:00', DateTime::ATOM)); # true
var_dump(validateDate('Tue, 28 Feb 2012 12:12:12 +0200', 'D, d M Y H:i:s O')); # true
# or
var_dump(validateDate('Tue, 28 Feb 2012 12:12:12 +0200', DateTime::RSS)); # true
var_dump(validateDate('Tue, 27 Feb 2012 12:12:12 +0200', DateTime::RSS)); # false
# ...
有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。
我有一根线,比如: 如何匹配每行的最后一个?顺便说一句,这是我试图在Sublime的文本中做到的。这些值不一致,就像我在这里看到的,我有几百行要替换。 我尝试了,但这与相匹配。
问题内容: 我试图创建下面的正则表达式:返回之间的字符串和(或或)从下列字符串RNA: ,让所有的比赛会被发现,包括重叠的。 我尝试了几种正则表达式,最后得到了类似的结果: 您能告诉我我的正则表达式模式中的错误吗? 问题答案: 用一个正则表达式执行此操作实际上是非常困难的,因为大多数用法 都不 希望重叠匹配。但是,您可以通过一些简单的迭代来做到这一点: 虽然,这有一些问题。您希望得到的回报是什么?
这是我的问题。我有这个: 然而,它并不匹配。为什么?我试图检索括号内的数字。 我应该尝试什么?
我们得到了一些这样的内容:
我使用wiremock来模拟某些请求及其相应的响应,但我试图添加一个正则表达式。不幸的是,这只会引发一个异常,表明请求不匹配。 我也试过了 我发送的请求是