Как сделать чтобы в input можно было вводить только цифры react

Обновлено: 08.07.2024

Можно создать событие на OnChange и сверять введенные данные.

Классически это конечно обработка OnKeyPress
и проверка Key на множество цифр, и в случае
если Key не цифра (или что еще в множестве),
установка Key=0, но это может несовсем
правильно работать с CSpinEdit.

З.Ы.: Есть ведь уже готовые сэмплы.

Originally posted by WidowMaker
Классически это конечно обработка OnKeyPress
и проверка Key на множество цифр, и в случае
если Key не цифра (или что еще в множестве),
установка Key=0, но это может несовсем
правильно работать с CSpinEdit.

З.Ы.: Есть ведь уже готовые сэмплы.

Впринципе я так и реализовал, но теперь не могу сообразить как впихнуть сюда клавишу БЭКСПЭЙС.
Нужно чтобы она работала.

А Вы уверены, что так надо делать? Ведь похожий вопрос возникал перед разработчиками конторы Borland, соответственно, они должны были как-то его решать. И они его решили - при применении TCSpinEdit, ежели туда какую-нибудь хрень забиваешь, он пытается понять, что записывать в свойство Value, у компонента это, ессно, не получается и он генерит исключение, EConvertError. Причём это происходит тогда, когда компонент теряет фокус. После этого величина в строчке редактирования сбрасывается в ноль, соотвественно, в ноль устанавливается свойство Value этого компонента. Логическим ходом кажется написать обработчик, который перехватывает это исключение, что-нибудь вроде


Единственная проблема возникает: понятия не имею, чего писать после слова try и вааще, где писать этот код?!

Трезвый :
7 лет, 2 месяца, 21 день

Господа помогите модифицировать скрипт:

Он пропускает только цифры, запятые, и пять цифр после запятой, а нужно: цифры и одну точку или запятую, ВАЖНО! Только одну точку или запятую, и только что то одно, или точку или запятую. Благодарю.

Трезвый :
7 лет, 2 месяца, 21 день


Кое как разобрался, теперь пропускает еще и точку и 5 знаков после нее, но как сделать что бы пропускало либо точку либо запятую? Помогите плиз. Мне нужно будет три дня потратить чтобы самому найти ответ.

О бычно программа работает по такой схеме: получает входные данные → обрабатывает их → выдает результат. Ввод может поступать как непосредственно от пользователя через клавиатуру, так и через внешний источник (файл, база данных).

В стандартной библиотеке Python 3 есть встроенная функция input() (в Python 2 это raw_input() ), которая отвечает за прием пользовательского ввода. Разберемся, как она работает.

Чтение ввода с клавиатуры

Функция input([prompt]) отвечает за ввод данных из потока ввода:

  1. При вызове функции input() выполнение программы приостанавливается до тех пор, пока пользователь не введет текст на клавиатуре (приложение может ждать бесконечно долго).
  2. После нажатия на Enter , функция input() считывает данные и передает их приложению (символ завершения новой строки не учитывается).
  3. Полученные данные присваиваются переменной и используются дальше в программе.

input() всегда возвращает строку :

s = input() print(type(s)) > 2 >

Также у input есть необязательный параметр prompt – это подсказка пользователю перед вводом:

name = input("Введите имя: ") print(f"Привет, !") > Введите имя: Вася > Привет, Вася!

📃 Более подробное описание функции из документации:

def input([prompt]): """ Read a string from standard input. The trailing newline is stripped. The prompt string, if given, is printed to standard output without a trailing newline before reading input. If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError. On *nix systems, readline is used if available. """ pass

Преобразование вводимые данные

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

☝️ Важно : если вы решили преобразовать строку в число, но при этом ввели строку (например: test), возникнет ошибка:

ValueError: invalid literal for int() with base 10: 'test'

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

def get_room_number(): while True: try: num = int(input("Введите номер комнаты: ")) return num except ValueError: print("Вы ввели не число. Повторите ввод") room_number = get_room_number() print(f"Комната успешно забронирована!") > Введите номер комнаты: test > Вы ввели не число. Повторите ввод > Введите номер комнаты: 13 > Комната 13 успешно забронирована!

Input() → int

Для преобразования в целое число используйте функцию int() . В качестве аргумента передаются данные которые нужно преобразовать, а на выходе получаем целое число:

age_str = input("Введите ваш возраст: ") age = int(age_str) print(age) print(type(age)) > Введите ваш возраст: 21 > 21 >

То же самое можно сделать в одну строку: age = int(input("Введите ваш возраст: ")) .

Input() → float

Если нужно получить число с плавающей точкой (не целое), то его можно получить с помощью функции float() .

weight = float(input("Укажите вес (кг): ")) print(weight) print(type(weight)) > Укажите вес (кг): 10.33 > 10.33 >

Input() → list (список)

Если в программу вводится информация, которая разделяется пробелами, например, "1 word meow", то ее легко преобразовать в список с помощью метода split() . Он разбивает введенные строки по пробелам и создает список:

list = input().split() print(list) print(type(list)) > 1 word meow > ['1', 'word', 'meow'] >

💭 Обратите внимание, что каждый элемент списка является строкой. Для преобразования в число, можно использовать int() и цикл for. Например, так:

int_list = [] for element in input().split(): int_list.append(int(element)) print([type(num) for num in int_list]) > 1 2 3 > [ , , ]

Ввод в несколько переменных

Если необходимо заполнить одним вводом с клавиатуры сразу несколько переменных, воспользуйтесь распаковкой:

В этом примере строка из input() разбивается по пробелу функцией split() . Далее применяется синтаксис распаковки – каждый элемент списка попадает в соответствующую переменную.

Все переменные после распаковки будут строкового типа. Преобразовать их (например в int) можно так:

a, b = [int(s) for s in input().split()] print(f"type a: , type b: ") > 13 100 > type a: , type b:

☝️ Важно : не забывайте обрабатывать ошибки:

  • если введенных значений больше чем переменных, получите ошибку – ValueError: too many values to unpack (expected 3) ;
  • если введенных значений меньше чем переменных, получите ошибку – ValueError: not enough values to unpack (expected 3, got 2) ;
  • если преобразовываете в int, а вводите строку – ValueError: invalid literal for int() with base 10: 'test' .

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

:(

zarus
За совет, конечно же, спасибо. Только вот не работает он у меня.
В поле input я смог и буквы писать, и цифры и всё подряд.
---
Быть может, что-то не так делаю?

matilda

Новичок

white phoenix

Новичок

;)

matilda
> причем тут интервал времени.
Не обращай внимания, бывает еще не то напишут
Имелся в виду запуск проверки поля через например 0.2 сек, но это неправильно, ровно как и onkeyup. Нужно выполнять функцию проверки по событию onChange проверяемого поля.

Линка

Новичок

white phoenix

onChange для inputa не работает

white phoenix

Новичок

:)

Линка
> onChange для inputa не работает
По религиозным причинам? Не вводи ma~ в заблуждение

Линка

Новичок

:)

white phoenix
сори , таки да , браузер глючит(или я )

bkonst

.. хочется странного.

onchange даст результат, когда пользователь попытается выйти из поля, а onkeyup - в момент ввода неправильного символа. Так что это еще бабушка надвое сказала, что предпочтительнее.

white phoenix

Новичок

bkonst
Совершенно верно. Именно поэтому я предложил onChange, зачем проверять всё поле через каждое промежуточное изменение?

Юрий Вайланд

Новичок

Линка

Новичок

Юрий Вайланд

:)

Коментариев выше предостаточно
white phoenix
пасибки за onchange (все элементарно и просто)

white phoenix

Новичок

Юрий Вайланд
> Так и начинаю врубаться в JavaScript всё больше и больше.
Язык элементарный, советую почитать книжку, хотя мне ничего читать (кроме исходников) не понадобилось.
> Напишите, уж, в конце-то концов, как именно будет выглядеть скрипт,
> который не позволит в поле input вводить больше 5 значений ЦИФР.

Читайте также: