Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как проверить правильность даты?
 
 автор: antf   (18.07.2014 в 02:35)   письмо автору
 
 

Здравствуйте, как узнать, что пользователь ввел валидную дату? Дата вводится по шаблону __.__.____ Вместо подчеркиваний можно вводить только цифры. Проблема в том, что программа пропустит и такую дату: 45.34.2345. Как тут быть?

  Ответить  
 
 автор: Commander   (18.07.2014 в 07:29)   письмо автору
 
   для: antf   (18.07.2014 в 02:35)
 

Проверяйте регулярными выражениями. http://softtime.ru/forum/srch.php?id_forum=1&name=%EF%F0%EE%E2%E5%F0%EA%E0+%E4%E0%F2%FB&numberthemes=30&srchwhere=1&id_forum=6&logic=1&send=%CD%E0%E9%F2%E8

  Ответить  
 
 автор: confirm   (18.07.2014 в 09:34)   письмо автору
 
   для: antf   (18.07.2014 в 02:35)
 

<?
if($data strtotime('45.34.2345')) {
    echo 
$data;
}

if(
$data strtotime('21.5.2014')) {
    echo 
$data;
}


Если время введено корректно, но например вне рамок диапазона 32-разрядной системы, то будет возвращена метка Unix, что также можно проверять.

И зачем такой "строгий" шаблон? Во всяком случае так дату в базе не хранить.

  Ответить  
 
 автор: antf   (18.07.2014 в 17:03)   письмо автору
 
   для: confirm   (18.07.2014 в 09:34)
 

>И зачем такой "строгий" шаблон? Во всяком случае так дату в базе не хранить.

Шаблон для людей, дата преобразовывается потом с помощью регулярных выражений. js-библиотеку, задающую шаблон, мне Commander посоветовал. Она очень понравилась руководству и паре заказчиков. Теперь они ее внедряют, где только можно на сайте.

  Ответить  
 
 автор: confirm   (18.07.2014 в 17:13)   письмо автору
 
   для: antf   (18.07.2014 в 17:03)
 

Да на клиенте вы что хотите творите, хотя заставлять писать дату обязательно так как вам хочется, это не думаю, что хорошо.
А вот хранить в базе дату в этом формате нет, сами понимаете почему. А посему преобразовывать ее при получении в любом случае придется, и рег. выражений для этого совсем не требуется.
И вывести из базы опять в формате который вам нужен, так это DATE_FORMAT()
Что вам советовали, помню, хотя это просто лишнее, тем более при единственном формате ввода. Да и вообще, клеить по каждому пустячному поводу на странице какой-то плагин, это не метод программирования.

  Ответить  
 
 автор: antf   (18.07.2014 в 17:20)   письмо автору
 
   для: confirm   (18.07.2014 в 17:13)
 

>Да на клиенте вы что хотите творите, хотя заставлять писать дату обязательно так как вам хочется, это не думаю, что хорошо.

Это дата закрытия заказа. Заполняет менеджер. Данные будут вставлены в столбец типа DATE.

>А посему преобразовывать ее при получении в любом случае придется, и рег. выражений для этого совсем не требуется.

Хорошая мысль, strtotime спасет. Прочитал 3 раза, потом понял.

Здесь плагин выступает как средство решения проблемы, к тому же он всем понравился :)

  Ответить  
 
 автор: confirm   (18.07.2014 в 17:27)   письмо автору
 
   для: antf   (18.07.2014 в 17:20)
 

Да нет в вашей задачи никакой проблемы, вы ее сами придумали.
Лично мне бы не понравилось грузить никчемные излишки наряду с полезным. Если вы по заданию жены пойдете на рынок и купите не только то, что она просила, а еще и лишнее чего вам насоветовали, приятно ли будет тащить лишнее и обрадуется ли жена ненужному? Вот тоже и на страницах происходит.

  Ответить  
 
 автор: antf   (18.07.2014 в 17:30)   письмо автору
 
   для: confirm   (18.07.2014 в 17:27)
 

У меня не жена, у меня заказчики и руководство, которое с ними общается. Они настаивают на плагине.

  Ответить  
 
 автор: confirm   (18.07.2014 в 17:38)   письмо автору
 
   для: antf   (18.07.2014 в 17:30)
 

Вот уж никогда не поверю тому, что заказчик разбирается в программировании лучше исполнителя. Другими словами, они настаивают на этом только лишь потому, что вы это им сами подсунули, а до этого вряд ли они знали о нем, да и вообще такого слова "плагин".
Плагины не пишутся под единственное конкретное действие, просто это глупо. Хотите, ну так используйте решения из этого плагина, тем более что проверить на клиенте формат даты это простое рег. выражение, а если вы ведете речь о "красоте", то в рамках jQuery сделать это просто и без всякого плагина.
Речь ведь не о том, что плохо подключать нечто. Плохо то, что часть подключаемого дублируется еще чем либо подключаемым.

  Ответить  
 
 автор: antf   (18.07.2014 в 17:34)   письмо автору
 
   для: confirm   (18.07.2014 в 17:27)
 

К тому же менеджер может написать дату вот так "1 июля 2014", тут точно strtotime не спасает :)

  Ответить  
 
 автор: confirm   (18.07.2014 в 17:42)   письмо автору
 
   для: antf   (18.07.2014 в 17:34)
 

>К тому же менеджер может написать дату вот так "1 июля 2014"

Может, а может написать и "от рождества Христова". Но вы ведь пишите, что есть формат ввода, а значит проверяется по этому формату, и другого формата вы не принимаете, так или нет? Иначе начерта вам плагин и причем тут "__-__-____"?

strtotime на этот формат ответит false, чего с учетом вашего "__-__-____" как раз и требуется. Иначе вы задаете вопрос, подноготная которого спрятана в черном ящике.

  Ответить  
 
 автор: Valick   (18.07.2014 в 10:11)   письмо автору
 
   для: antf   (18.07.2014 в 02:35)
 

Антон, объясните мне как так получается. Когда я пришёл на форум, у вас уже была своя CMS. Но года полтора назад вы стали задавать на столько странные вопросы, что у меня даже мыслей никаких не укладывается в голове.
Пример с php.net
<?php

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
?>

  Ответить  
 
 автор: antf   (18.07.2014 в 12:29)   письмо автору
 
   для: Valick   (18.07.2014 в 10:11)
 

На данном этапе. Я практик. Вижу задачу. Пробую решить сам или гуглю. Не удается погуглить или решить самому - спрашиваю. Формулирую вопрос, чтобы знающие люди ответили за несколько секунд. Здесь такой случай.

>Антон, объясните мне как так получается. Когда я пришёл на форум, у вас уже была своя CMS. Но года полтора назад вы стали задавать на столько странные вопросы, что у меня даже мыслей никаких не укладывается в голове.

Т.е. почему я не знаю web-технологии на уровне cheops'а, Trianon'а, confirm'а, других отвечающих (кто там еще продвинулся?), хотя программирую с 2004? С октября 2012 года я серьезно заболел. Подробнее на моей страничке Вконтакте и по ссылкам (там совсем немного). В последнее время очень сложно сосредоточиться. С октября 2012 года я прочитал всего 2 книги - роман Гюго Отверженные (1000 страниц печатного текста) и самоучитель php от Softtime. Попытки чтения системных книг по JavaScript провалились. Даже в игры играть сложно! Не чувствуешь прежнего удовольствия. Все делаешь из-под палки. Пока сил хватает только на работу и то делаю это в пол-силы. Я хотел бросить совсем программирование после того, как заболел, начальству стоило огромных усилий меня удержать. Зубами цепляюсь за то, что есть, надеюсь идти дальше, иначе инвалидность (мне ее пока не дают, потомучто я работаю).

  Ответить  
 
 автор: confirm   (18.07.2014 в 16:26)   письмо автору
 
   для: antf   (18.07.2014 в 12:29)
 

Ваш вопрос не столько о технологиях, сколь о конкретном типе данных. А уж с этим типом данных у языка точно будет инструментарий. Остается только заглянуть в руководство. Пример выше из руководства, это удобный набор классов как раз для работы с датой, вот только заметил одну странность - говоришь об этом наборе, но как об стенку горохом, то-ли боязнь, то-ли еще чего. Хотя ничего запредельного там нет, достаточно раз вникнуть и знать о существовании.
Ну если такое страшно, то и среди процедурного достаточно функций.

  Ответить  
 
 автор: antf   (18.07.2014 в 14:46)   письмо автору
 
   для: Valick   (18.07.2014 в 10:11)
 

А что такого я спросил? Мои темы на этих форумах, исключая форум Разное, по пальцам можно пересчитать с октября 2012. См поиск по нику antf в тематических форумах. Вроде там нет ничего крамольного. Вот отвечать - да, у меня не получается.

  Ответить  
 
 автор: mihdan   (21.08.2014 в 00:17)   письмо автору
 
   для: antf   (18.07.2014 в 02:35)
 

Если всё так критично: поставьте для поля ввода readonly и повесьте на него любой JavaScript календарь, чтобы ваш формат никто не нарушил). Либо допилите ваш плагин для масок.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования