Как сделать чтобы в input можно было вводить только цифры react
Добавил пользователь Евгений Кузнецов Обновлено: 10.09.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]) отвечает за ввод данных из потока ввода:
- При вызове функции input() выполнение программы приостанавливается до тех пор, пока пользователь не введет текст на клавиатуре (приложение может ждать бесконечно долго).
- После нажатия на Enter , функция input() считывает данные и передает их приложению (символ завершения новой строки не учитывается).
- Полученные данные присваиваются переменной и используются дальше в программе.
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 значений ЦИФР.
Читайте также: