Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как разрешить ввод в поле input только цифр?
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 17 дней
Карма:




Цитата (FatCat @ 4.04.2024 - 20:20)
Если ввести «1бублик», твоя проверка признает ввод правильным.

Нет, потому что у меня <input type=number>. Один только нехороший момент, который пропускает запятые и точки, и если пользователь вводит, например, 100,000 или 100.000, то записывается в файл - 100, а все что после точки или запятой вырезается. Вот я и подумал в эту сторону
Цитата (Kuzma92 @ 4.04.2024 - 19:43)
как правильно добавить сюда же (не создавая новую) дополнительную проверку на заполнение только цифр

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



חשב את עצמו
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 6963
Пользователь №: 1
На форуме: 19 лет, 1 месяц, 16 дней
Карма: 145




Цитата (Kuzma92 @ 4.04.2024 - 20:57)
и если пользователь вводит, например, 100,000 или 100.000, то записывается в файл - 100

Тогда зачем сравнивать с нулем?


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 17 дней
Карма:




Цитата (FatCat @ 5.04.2024 - 00:50)
Тогда зачем сравнивать с нулем?

чтобы значение было 0 или более, но не было пустым

Это сообщение отредактировал Kuzma92 - 5.04.2024 - 02:10
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 6460
Пользователь №: 35718
На форуме: 12 лет, 4 месяца, 4 дня
Карма: 208





<?php
declare(strict_types=1);

$min = 0;
$max = 1000;
$error = 'Число должно быть в диапазоне от ' . $min . ' до ' . $max;
$args = [
'number' => [
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_SCALAR,
'options' => [
'min_range' => $min,
'max_range' => $max,
],
],

'action' => [],
];


$post = filter_input_array(INPUT_POST, $args);
?>
<form method="post">
<
label>
<
input type="text" name="number" value="<?= $post['number'] ?? '' ?>">
</
label>
<
input type="submit" name="action" value="Отправить">
</
form>
<?php
if (isset($post['action']) && $post['number'] === false) {
?><p><?= $error ?></p><?php
}



--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 17 дней
Карма:




Valick, спасибо вам за ответ. Скажите, пожалуйста, а если дополнительно добавить еще фильтр FILTER_SANITIZE_NUMBER_INT или FILTER_SANITIZE_NUMBER_FLOAT, то как правильно их прописать в коде? Так?:

'filter' => FILTER_VALIDATE_INT,
'filter' => FILTER_SANITIZE_NUMBER_INT,


или так:

'filter' => 'FILTER_VALIDATE_INT', 'FILTER_SANITIZE_NUMBER_INT',
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 6460
Пользователь №: 35718
На форуме: 12 лет, 4 месяца, 4 дня
Карма: 208




Kuzma92, вместе не получится, да и надо ли это честно говоря сомнительно.

Если человек введёт 3,15, то он расчитывает на 3 целых 15 сотых, а не 315.
Я бы чистил максимум только пробелы. Типа 1000 и 1 000 и то и то тысяча.

Можно конечно поступить вот так, но в моих глазах это зло (по части санитайзера), хотя сам принцип обработки в цикле нормальный.

<?php
declare(strict_types=1);

function checkInputPost(array $argList): array
{
$array = filter_input_array(INPUT_POST, array_shift($argList)) ?? [];
foreach ($argList as $arg) {
$array = filter_var_array($array, $arg);
}

return $array;
}

$min = 0;
$max = 1000;
$error = 'Число должно быть в диапазоне от ' . $min . ' до ' . $max;
$argList = [
1 => [
'number' => [
'filter' => FILTER_SANITIZE_NUMBER_INT,
],

'action' => [],
],

2 => [
'number' => [
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_SCALAR,
'options' => [
'min_range' => $min,
'max_range' => $max,
],
],

'action' => [],
],
];


$post = checkInputPost($argList);
?>
<form method="post">
<
label>
<
input type="text" name="number" value="<?= $post['number'] ?? '' ?>">
</
label>
<
input type="submit" name="action" value="Отправить">
</
form>
<?php
if (isset($post['action']) && $post['number'] === false) {
?><p><?= $error ?></p><?php
}


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 6460
Пользователь №: 35718
На форуме: 12 лет, 4 месяца, 4 дня
Карма: 208




Но всё это баловство, чисто для изучения РНР
для проекта пусть даже маленького лучше использовать один из валидаторов по ссылке которую я уже закидывал
https://habr.com/ru/articles/521292/

Вроде Сириус не сложный https://github.com/siriusphp/validation


--------------------
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 17 дней
Карма:




Valick, я понял. Спасибо вам за информацию, за разъяснения. Все очень доступно. Смотрю, изучаю, анализирую.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса