[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка формы
cyberside
Нужно перед отправкой проверить поле на правильность заполнения...
Допустим правильно нужно ввести такое:
Шаблон: DATE_число:месяц:год
Пример: DATE_28:08:11

Зараниее спасибо!



Спустя 4 минуты, 54 секунды (28.07.2011 - 22:40) Winston написал(а):
C помощью регулярки, так
preg_match("#^[\d]{2}:[\d]{2}:([\d]{2}|[\d]{4})$#", $str);

Но оно не решит проблемы если будет введено 99:99:9999

Спустя 3 минуты, 43 секунды (28.07.2011 - 22:44) cyberside написал(а):
Тоесть если будет введено к примеру DUTE_9:9:2322 Оно не выдает ошибку?
Или не выдаст только при DUTE_99:99:9999 (DATE_99:99:9999)

Спустя 1 минута, 3 секунды (28.07.2011 - 22:45) Winston написал(а):
Цитата (cyberside @ 28.07.2011 - 22:44)
9:9:2322

Будет ошибка
Цитата (cyberside @ 28.07.2011 - 22:44)
99:99:9999

Не будет ошибки

Спустя 22 секунды (28.07.2011 - 22:45) alex12060 написал(а):

var_dump(preg_match('#^DATE_[\d]{2}:[\d]{2}:[\d]{2}$#u', 'DATE_28:08:11'));

Спустя 3 минуты, 54 секунды (28.07.2011 - 22:49) cyberside написал(а):
Если я понял правильно нужно записать так:

if($_POST['DATE'] = var_dump(preg_match('#^DATE_[\d]{2}:[\d]{2}:[\d]{2}$#iu', 'DATE_28:08:11'))){
echo "Okey!";
}esle{
echo "Bad!";
}

Спустя 2 минуты, 20 секунд (28.07.2011 - 22:51) Winston написал(а):
А вот такая проверка будет самая надежная. Никто не обойдет :)
$date = "31:02:2011";
$date = preg_split("/:/", $date);
if(checkdate($date[1], $date[0], $date[2]))
echo 'ok';
else
echo 'bad';

Спустя 41 секунда (28.07.2011 - 22:52) alex12060 написал(а):
cyberside

Нет :)
Так уж:


if(preg_match('#^DATE_[\d]{2}:[\d]{2}:[\d]{2}$#u', $_POST['DATE']) == true)
echo 'Ok';
else
echo 'Bad';

Спустя 49 секунд (28.07.2011 - 22:53) Winston написал(а):
Цитата (cyberside @ 28.07.2011 - 22:49)
Если я понял правильно нужно записать так

Нет
Так
if(preg_match('#^DATE_[\d]{2}:[\d]{2}:(?:[\d]{2}|[\d]{4})$#iu', 'DATE_28:08:11')){
echo "Okey!";
}esle{
echo "Bad!";
}

Спустя 1 минута, 46 секунд (28.07.2011 - 22:54) cyberside написал(а):
Благодарю за помощь!

Спустя 4 минуты, 49 секунд (28.07.2011 - 22:59) alex12060 написал(а):
PHPprogrammer

Кстати, раз уж ты затронул функцию checkdate(), то скажу, что такую дату она распознает:

var_dump(checkdate(06, 06, 07));


А такую, нет:


var_dump(checkdate(06, 06, 08));
var_dump(checkdate(08, 06, 07)); // и эту :)


Спустя 6 минут, 36 секунд (28.07.2011 - 23:06) cyberside написал(а):
Можно еще гдето, посмотреть синтаксис preg_match()

Спустя 28 секунд (28.07.2011 - 23:06) Winston написал(а):
Странно, но так работает
$date = "08:06:07";
$date = preg_split("/:/", $date);
if(checkdate($date[1], $date[0], $date[2]))
echo 'ok';
else
echo 'bad';

А вот поставив
$date = "02:29:07";

Уже не работает



Спустя 43 секунды PHPprogrammer написал(а):
Цитата (cyberside @ 28.07.2011 - 23:06)
Можно еще гдето, посмотреть синтаксис preg_match()

Тебе уже показали пример. А, что еще надо ?

Спустя 2 минуты, 42 секунды (28.07.2011 - 23:09) alex12060 написал(а):
PHPprogrammer

Потому-что функция приводит к string, а не к int, как в моих примерах smile.gif
Вот именно в кавычки и надо обрамлять, чтобы сработало.

Спустя 1 минута, 45 секунд (28.07.2011 - 23:11) cyberside написал(а):
Хочу подробнее изучить эту полезную штуку...

Спустя 2 минуты, 45 секунд (28.07.2011 - 23:14) Winston написал(а):
Цитата (cyberside @ 28.07.2011 - 23:11)
Хочу подробнее изучить эту полезную штуку

Какую ? рег, checkdate ?

Спустя 1 минута, 17 секунд (28.07.2011 - 23:15) YVSIK написал(а):
а я так решил эту задачу для себя
в поля вставлет не юзер данные ;именно не юзер а PHP функнцией date
и прикрыл поле от пользователя саму форму чтоб от не смог её изменить

echo date("Y:m:d",time()+ 30*24*60*60);?>" readonly="readonly"

а если надо изменить дату то мона придумать как ввести число и подставлять
вместо числа 30 любое переменной
функция её сама сформирует и всё ВУАЛЛЯ!

Спустя 51 секунда (28.07.2011 - 23:16) alex12060 написал(а):
cyberside

Тебе нужно читать про RegExep

http://phpclub.ru/detail/article/regexp_1
http://phpclub.ru/detail/article/regexp_2

Спустя 8 минут, 15 секунд (28.07.2011 - 23:24) Invis1ble написал(а):
alex12060, PHPprogrammer
можно и без скобок обойтись
var_dump((bool)preg_match('#^DATE_\d{2}:\d{2}:\d{2}$#', 'DATE_28:08:11'));


cyberside
добро пожаловать

Спустя 2 минуты, 58 секунд (28.07.2011 - 23:27) 03x1 написал(а):
Цитата (PHPprogrammer @ 28.07.2011 - 20:06)
Странно, но так работает
$date = "08:06:07";
$date = preg_split("/:/", $date);
if(checkdate($date[1], $date[0], $date[2]))
echo 'ok';
else
echo 'bad';

А вот поставив
$date = "02:29:07";

Уже не работает

Подставь в конец

foreach ($date as $key){
echo $key . "<br />";
}

И увидишь почему не работает.

Спустя 3 минуты, 17 секунд (28.07.2011 - 23:30) Invis1ble написал(а):
зачем вообще там preg_split(), если explode() решает ту же задачу

Спустя 1 минута, 11 секунд (28.07.2011 - 23:31) Winston написал(а):
Цитата (Invis1ble @ 28.07.2011 - 23:30)
зачем вообще там preg_split(), если explode() решает ту же задачу

Извращения biggrin.gif

Спустя 3 минуты, 52 секунды (28.07.2011 - 23:35) cyberside написал(а):
preg_match('#^DATE_[\d]{2}:[\d]{2}:[\d]{2}$#u', $_POST['DATE'])


Как правильно написать чтобы можно было вводить год как 11 так и 2011?
Тоесть, но я так понял что это не верно:
preg_match('#^DATE_[\d]{2}:[\d]{2}:[\d]{2-4}$#u', $_POST['DATE'])

Спустя 2 минуты, 16 секунд (28.07.2011 - 23:38) Invis1ble написал(а):
var_dump((bool)preg_match('#^DATE_\d{2}:\d{2}:\d{2}(?:\d{2})?$#', 'DATE_28:08:11'));

Спустя 4 минуты, 17 секунд (28.07.2011 - 23:42) Winston написал(а):
Или же
var_dump((bool)preg_match('#^DATE_\d{2}:\d{2}:(?:\d{2}|\d{4})?$#', 'DATE_28:08:11'));

Спустя 1 минута, 5 секунд (28.07.2011 - 23:43) Invis1ble написал(а):
PHPprogrammer
Цитата
var_dump((bool)preg_match('#^DATE_\d{2}:\d{2}:(?:\d{2}|\d{4})?$#', 'DATE_28:08:11'));

ошибочка, правильный вариант:
var_dump((bool)preg_match('#^DATE_\d{2}:\d{2}:(?:\d{2}|\d{4})$#', 'DATE_28:08:11'));

Спустя 2 минуты, 8 секунд (28.07.2011 - 23:45) Winston написал(а):
Ну да. ? не заметил
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.