2013-07-05 4 views
2

Попытка проверить строку, чтобы проверить, имеет ли она формат 07.05.2013, не уверен, как подойти к нему.Проверка наличия строки в формате 07.05.2013

Думая о проверке, если '.' являются 3-м и 6-м символами, а затем проверяют, являются ли остальные символы цифрами, но я не знаю, как это достичь.

+1

Вы хотите проверить персонажи или подтвердить свою дату? – HamZa

+0

Изменить '-' to '.' в regex http://stackoverflow.com/questions/5032313/php-regex-date-validation – stark

+3

Является ли формат mm.dd.yyyy или dd.mm.yyyy? – DaGardner

ответ

4

Если вам просто нужно проанализировать дату, вы можете использовать функции времени даты php.

<?php 
$date = DateTime::createFromFormat('d.m.Y', '07.05.2013'); 
echo $date->format('Y-m-d'); 
?> 
2
if (preg_match('/^\d{2}\.\d{2}\.\d\{4}$/', $yourstring)) { 
... 
} 

Это будет верно, если ваша строка соответствует выражению типа dd.dd.dddd, где d - это цифра.

+0

вы забыли '^' и '$' для соответствия от начала до конца – hek2mgl

+0

да, я сделал. Спасибо –

2

Вы также можете использовать функцию checkdate:

$date= '07.05.2013'; 
$date_arr= explode('.', $date); 
if (checkdate($date_arr[0], $date_arr[1], $date_arr[2])) { 
    // validate your date here 
} 
+0

Я бы добавил еще одну проверку: 'if (count ($ date_arr) == 3)'.Это предотвратит некоторые неприятные неопределенные ошибки смещения ... – HamZa

3

Используйте метод DateTime::CreateFromFormat(). Это подтвердит ваш ввод и одновременно создаст объект даты (который вы можете использовать для работы с датой).

$dateObj = DateTime::CreateFromFormat('d.m.Y', $inputString); 

Если дата является недействительным или в неправильном формате, $dateObj будет false.

Если это действительная дата в необходимом формате, $dateObj будет DateTime.

Надеюсь, что это поможет.

1

Что-то вроде:

$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

РЕШЕНИЕ 1:

Вот как я это сделал, он работает с каждым входом вы решили ввести (например: "12.02.1996", "12.30.1996", "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; 
    } 
} 

Если дата вход 10/10/1996, который также допустимый формат, или 10/02/1996, он не будет принимать их, потому что я прошу пользователю использовать формат с. ". Просто удалите «if», если вы не хотите выполнять эту проверку, и это все.

РЕШЕНИЕ 2:

Нашел в php.net, очень чистый и интересный!

public function valid_date($date, $format = 'd.m.Y'){ 
     $d = DateTime::createFromFormat($format, $date); 
     return $d && $d->format($format) == $date; 
} 
Смежные вопросы