Мне нужен TextInput
компонент React Native , который позволяет вводить только числовые символы (0–9). Я могу установить keyboardType
на numeric
который почти заставляет меня есть для ввода в течение периода , за исключением (.). Однако это не мешает вставлять в поле нечисловые символы.
До сих пор я придумал использовать OnChangeText
событие для просмотра введенного текста. Я удаляю из текста все нечисловые символы. Затем поместите текст в поле состояния. Затем обновите TextInput
его Value
свойство. Фрагмент кода ниже.
<TextInput
style={styles.textInput}
keyboardType = 'numeric'
onChangeText = {(text)=> this.onChanged(text)}
value = {this.state.myNumber}
/>
onTextChanged(text) {
// code to remove non-numeric characters from text
this.setState({myNumber: text})
}
Кажется, это работает, но похоже на взлом. Есть другой способ сделать это?
react-native
Терри
источник
источник
keyboardType='numeric'
опору в TextInput, чтобы отображать только числовую клавиатуру (да), а также заменяю тексты регулярным выражением,text.replace(/[^0-9]/g, '')
как предлагается ниже, чтобы никто не вставлял строки внутри TextInput. Пока работает нормально на React Native v0.62Ответы:
Это правильный способ делать это до тех пор, пока такой компонент (или атрибут в TextInput) не будет специально разработан.
В Интернете для элемента ввода есть «числовой» тип, но он основан на веб-технологиях и не использует веб-представление.
Вы можете подумать о создании этого ввода как собственного компонента реакции (возможно, вызовите NumberInput): это позволит вам повторно использовать его или, возможно, даже открыть исходный код, поскольку вы можете создать много TextInputs, которые имеют разные фильтры / средства проверки значений.
Обратной стороной немедленного исправления является обеспечение правильной обратной связи с пользователем во избежание путаницы относительно того, что случилось с его значением.
источник
Использование RegExp для замены любых цифр быстрее, чем использование цикла for с белым списком, как это делают другие ответы.
Используйте это для своего обработчика onTextChange:
Тест производительности здесь: https://jsperf.com/removing-non-digit-characters-from-a-string
источник
text.replace(/[^A-Za-z]/g, '')
keyboardType='numeric'
опору в поле TextInput.Вы можете сделать это вот так. Он принимает только числовые значения и ограничивается 10 числами по вашему желанию.
Вы можете увидеть введенное значение, написав на своей странице следующий код:
В функции onChanged () код выглядит так:
Надеюсь, это поможет другим.
источник
React Native TextInput предоставляет свойства keyboardType со следующими возможными значениями: цифровая клавиатура по умолчанию, десятичная клавиатура, числовой адрес электронной почты, телефонная клавиатура.
поэтому в вашем случае вы можете использовать keyboardType = 'number-pad' для приема только чисел. Это не включает '.'
так,
это то, что вы должны использовать в вашем случае.
для получения дополнительных сведений обратитесь к официальной ссылке на документ для TextInput: https://facebook.github.io/react-native/docs/textinput#keyboardtype
источник
Функция для проверки ввода:
Надеюсь, это поможет.
источник
Разрешить только числа с использованием регулярного выражения
Возможно, вы захотите провести более одной проверки
источник
validations(value: string) { return /0/.test(value) && /^\d+$/.test(value) ? this.setState({ numColumns: value }) : false; }
Первое решение
Вы можете использовать
keyboardType = 'numeric'
для цифровой клавиатуры.В первом случае используются знаки препинания, например: - . а также -
Второе решение
Используйте регулярное выражение для удаления знаков препинания.
Пожалуйста, проверьте ссылку закуски
https://snack.expo.io/@vishal7008/numeric-keyboard
источник
Доброе напоминание тем, кто столкнулся с проблемой, что «onChangeText» не может изменить значение TextInput должным образом на iOS: на самом деле это ошибка в ReactNative, которая была исправлена в версии 0.57.1. Обратитесь к: https://github.com/facebook/react-native/issues/18874
источник
и метод onChanged:
источник
"This synthetic event is reused for performance reasons. If you're seeing this, you're accessing the property 'type' on a released/nullified synthetic event. This is set to null. If you must keep the original synthetic event around, use event.persist(). See fb>react-event-pooling for more information."
я не знаю, что с этим делать. Вы можете помочь?У меня была такая же проблема в iOS, когда я использовал событие onChangeText для обновления значения текста, введенного пользователем, я не мог обновить значение TextInput, поэтому пользователь все равно будет видеть нечисловые символы, которые он набрал.
Это произошло потому, что при нажатии нечислового символа состояние не изменилось, поскольку this.setState будет использовать тот же номер (число, которое осталось после удаления нечисловых символов), и тогда TextInput не будет повторно отображаться.
Единственный способ решить эту проблему, который я нашел, - это использовать событие keyPress, которое происходит перед событием onChangeText, и в нем использовать setState для изменения значения состояния на другое, совершенно другое, заставляя повторную визуализацию при вызове события onChangeText . Не очень доволен этим, но это сработало.
источник
источник
Я написал эту функцию, которая, как мне показалось, была полезной для предотвращения возможности ввода пользователем чего-либо, кроме того, что я хотел принять. Я также использовал
keyboardType="decimal-pad"
и моиonChangeText={this.decimalTextChange}
Первый
if
блок - это обработка ошибок для случая, когда пользователь удаляет весь текст или использует десятичную точку в качестве первого символа, или если они пытаются ввести более одного десятичного разряда, второйif
блок гарантирует, что они могут ввести как сколько угодно чисел перед десятичным знаком, но только до двух десятичных знаков после запятой.источник
Использование RegExp для замены любых цифр. Позаботьтесь о том, чтобы следующий код дал вам первую найденную цифру, поэтому, если пользователь вставит абзац с более чем одним числом (xx.xx), код даст вам первое число. Это поможет, если вам нужна цена, а не мобильный телефон.
Используйте это для своего обработчика onTextChange:
источник
Вы можете удалить нечисловые символы с помощью регулярного выражения
источник
Это не работает на IOS, setState -> render -> не изменяет текст, но может изменять другие. Текстовый ввод не может изменить свое значение, когда textOnChange.
Кстати, это хорошо работает на Android.
источник
Я создал компонент, решающий эту проблему:
https://github.com/amirfl/react-native-num-textinput
источник
Вот мой другой простой ответ: принимать только числа в текстовом поле с использованием регулярных выражений.
источник
Только для десятичных / чисел с плавающей запятой попробуйте это
}
источник
Что ж, это очень простой способ проверить число, отличное от 0.
Это будет NaN, если inputNum не является числом, или false, если это 0
источник