Нет формата ввода php

Проверка ввода даты / времени в PHP

Новое для программирования в PHP. Попытка проверить формат ввода для даты/времени. Вход пользователя выглядит следующим образом для 27 ноября 2012 года в 18:00 «2012-ноябрь-27 | 6 вечера». Не уверен, с чего начать. Какие-либо предложения? Спасибо.

Хорошо, я не совсем уверен, что вы хотите, когда вы говорите «проверить формат ввода», но чтобы разбить его, вы должны сделать это: $ input = ‘2012-nov-27 | 6pm’; $ datetime = explode (‘|’, $ input); $ time = $ datetime [1]; $ input = $ datetime [0]; $ date = explode (‘-‘, $ input); $ year = $ date [0]; $ mth = $ date [1]; $ day = $ date [2];

6 ответов

Посмотрите здесь для документации date_parse_from_format и здесь для общего форматирования даты. Попробуйте:

Знаете ли вы, почему я получаю ошибку ( Unexpected data found. ) в результирующем массиве? Этого не произойдет, если я заменю | на [space] .

$input = '2012-nov-27|6pm'; $date = \DateTime::createFromFormat('Y-M-j ga', str_replace('|', ' ', $input)); if ($date === false)

ПРИМЕЧАНИЕ. Я столкнулся с проблемой, используя | в строке формата/даты, так что str_replace()

ПРИМЕЧАНИЕ 2: Если формат входного дня 01-31 вместо 1-31 , замените j на d в createFromFormat() первом параметре.

Если вы просто хотите проверить свою дату на действительность, будет работать следующее. Даже если вы просто хотите проверить формат ввода, я также предлагаю вам проверить работоспособность данных.

$thedate = "2012-nov-27|6pm"; $arryParts = explode("|", $thedate); $arryDate = date_parse($arryParts[0]); if(!checkdate($arryDate['month'], $arryDate['day'], $arryDate['year'])) < /* error handling */ >/* valid date, continue processing */ 

Если вы просто хотите проверить формат, используйте регулярное выражение:

$months = 'jan|feb|mar|apr|may|jun|jul|aug|sep|okt|nov|dec'; $pattern = '/(3)-('.$months.')-(7)\\|(2?5)(am|pm)/'; preg_match($pattern, $input, $matches); var_dump($matches); 

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

Это хорошая попытка, однако она оставляет ошибку. так как часть месяца допускает z, дата может быть произвольной 3-мя буквами и все же проходить.

Читайте также:  Jinja2 python code in template

Если бы я использовал это для проверки правильности ввода, могу ли я использовать отдельную функцию даты, такую как checkdate (), чтобы обеспечить достоверность даты?

Ред. Я разделил его на переменные, чтобы сделать его более читабельным здесь. Не стесняйтесь вставить их снова. Я также добавил круглые скобки, чтобы впоследствии вы получили разные части в $matches match, чтобы проверить их. Я не могу дать никакого совета по этому поводу, так как даты не являются сильной стороной PHP.

Это будет соответствовать 0000-jan-99|99am как действительная дата. Вы можете проверять даты с помощью регулярных выражений, но это далеко не тривиальный вопрос (как бы вы справились с високосными годами?). Самый простой / быстрый способ проверить правильность дат — это DateTime::createFromFormat() или date_create_from_format() , если вы предпочитаете это процедурно.

Если вы так думаете, то запустите DateTime::createFromFormat(‘Ymd H:i:s’, ‘0000-01-99 99:00:00’) и удивитесь. 😉

Источник

Проверка правильности ввода числа

Проверка правильности ввода e-mail!
У меня в коде php есть следующая конструкция для проверки полей при регистрации. //check for.

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

Проверка правильности выбора из списка
Подскажите пожалуйста скрипт для проверки правильности выбора из списка и сколько допущенных.

Проверка правильности php программы
Хочу изучить php, но чтобы работать с ним, нужен сервер. Apache никак не получается установить.

Эксперт PHP

У вас написано — неверный формат числа, а передаёте строку.

ЦитатаСообщение от Jodah Посмотреть сообщение

У вас написано — неверный формат числа, а передаёте строку.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
form action="31.php" name="31"> p>Введите дату input type="text" name="day" onkeyup="lal(this);" /> input type="text" name="month" onkeyup="lal(this);" /> input type="text" name="year" onkeyup="lal(this);" /> input type=submit value="Отправить" /> p> form> script> function lal(el) { if ( el.value.match( /[^0-9]/ ) ) { alert( "Неверный формат числа! \nМожно использовать только цифры" ); el.value = el.value.replace( /[^0-9]/ , "" ) } } script>

ЦитатаСообщение от DImawsasdas Посмотреть сообщение

каков смысл регулярки вашей?

Добавлено через 2 минуты
а на стороне сервера можно проверять так

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
 function lal() { foreach(["day" , "month" , "year"] as $key) { if (isset( $_REQUEST[$key] )) { if ( preg_match( "#[^0-9]#" , $_REQUEST[$key] ) ) { echo "Неверный формат числа! 
Можно использовать только цифры"
; return false; } } return true; } } if ( !lal() ) { exit; }

ЦитатаСообщение от WhiteMind Посмотреть сообщение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
form action="31.php" name="31"> p>Введите дату input type="text" name="day" onkeyup="lal(this);" /> input type="text" name="month" onkeyup="lal(this);" /> input type="text" name="year" onkeyup="lal(this);" /> input type=submit value="Отправить" /> p> form> script> function lal(el) { if ( el.value.match( /[^0-9]/ ) ) { alert( "Неверный формат числа! \nМожно использовать только цифры" ); el.value = el.value.replace( /[^0-9]/ , "" ) } } script>

Добавлено через 17 секунд

каков смысл регулярки вашей?

Добавлено через 2 минуты
а на стороне сервера можно проверять так

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
 function lal() { foreach(["day" , "month" , "year"] as $key) { if (isset( $_REQUEST[$key] )) { if ( preg_match( "#[^0-9]#" , $_REQUEST[$key] ) ) { echo "Неверный формат числа! 
Можно использовать только цифры"
; return false; } } return true; } } if ( !lal() ) { exit; }

Источник

Стандартный ввод PHP?

Я знаю, что PHP обычно используется для веб-разработки, где нет стандартного ввода, но PHP утверждает, что он может использоваться в качестве языка сценариев общего назначения, если вы следуете его навязчивым веб-соглашениям. Я знаю, что PHP печатает на stdout (или на все, что вы хотите назвать) с помощью print и echo , что достаточно просто, но мне интересно, как PHP-скрипт может получить вход от stdin (в частности, с помощью fgetc() , но любой вход функция хороша), или это даже возможно?

Можно прочитать stdin , создав дескриптор файла для php://stdin а затем прочитайте его с помощью fgets() для строки, например (или, как вы уже сказали, fgetc() для одного символа):

Чтение из STDIN рекомендуется

Чтобы не путаться с файловыми дескрипторами, используйте file_get_contents() и php://stdin :

$ echo 'Hello, World!' | php -r 'echo file_get_contents("php://stdin");' Hello, World! 

(Если вы читаете действительно огромный объем данных из stdin вы можете использовать подход filehandle, но это должно быть хорошо для многих мегабайт.)

Вы можете использовать fopen() для php://stdin :

IIRC, вы также можете использовать следующее:

$in = fopen(STDIN, "r"); $out = fopen(STDOUT, "w"); 

Технически то же самое, но немного чище синтаксиса.

Захватите все это одним выстрелом:

$contents = file_get_contents("php://stdin"); echo $contents; 
$data = stream_get_contents(STDIN); 

Источник

Оцените статью