试图验证一个字符串来检查它是否具有格式07.05.2013,不知道如何处理它。检查一个字符串是否有07.05.2013日期格式
想着检查'。'是第3和第6个字符,然后检查其余的字符是否是数字,但我不知道如何实现这一点。
试图验证一个字符串来检查它是否具有格式07.05.2013,不知道如何处理它。检查一个字符串是否有07.05.2013日期格式
想着检查'。'是第3和第6个字符,然后检查其余的字符是否是数字,但我不知道如何实现这一点。
如果您只需要解析日期,则可以使用php的日期时间功能。
<?php
$date = DateTime::createFromFormat('d.m.Y', '07.05.2013');
echo $date->format('Y-m-d');
?>
if (preg_match('/^\d{2}\.\d{2}\.\d\{4}$/', $yourstring)) {
...
}
如果您的字符串与dd.dd.dddd这样的表达式匹配,那么这将成立,其中d是数字。
您忘记了'^'和'$'匹配从开始到结束 – hek2mgl
是的,我做到了。谢谢 –
使用DateTime::CreateFromFormat()
方法。这将验证您的输入并同时创建一个日期对象(然后您可以使用它来处理日期)。
$dateObj = DateTime::CreateFromFormat('d.m.Y', $inputString);
如果日期是无效的或格式错误,$dateObj
将false
。
如果它是所需格式的有效日期,则$dateObj
将为DateTime
对象。
希望有所帮助。
喜欢的东西:
$date = DateTime::createFromFormat('d.m.Y', $yourStringWhichMightBeADate);
if ($date)
{
// it's a date, so use it
}
或者:
$date = DateTime::createFromFormat('m.d.Y', $yourStringWhichMightBeADate);
if ($date)
{
// it's a date, so use it
}
要是下个月是第一个,而不是一个月的日子。
解决方案1:
下面是我做的方式,它的工作原理与每一个你决定进入(例如,输入:“1996年2月12日”,“1996年12月30日”,“dasdsadas”等上..)
public function valid_date($inputdate){
$date = $inputdate;
if (strtotime($date)){
if (strpos($date,'.') !== false) {
list($day, $month, $year) = explode('/', $date);
return checkdate($month, $day, $year);
}else{
return false;
}
}else{
return false;
}
}
如果输入的日期为1996年10月10日,这也是一个有效的格式,或1996年10月2日,它不会接受他们,因为我要求的用户使用格式为“。”。只要删除“如果”你不想做这个验证,就是这样。
解决方案2:
在php.net,非常干净和有趣的发现这个!
public function valid_date($date, $format = 'd.m.Y'){
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
想验证字符还是要验证日期? – HamZa
将' - '更改为'。'在正则表达式http://stackoverflow.com/questions/5032313/php-regex-date-validation – stark
是格式mm.dd.yyyy或dd.mm.yyyy? – DaGardner