Кто-нибудь знает, как создать текстовый ввод, который, когда вы начинаете вводить его, автоматически разрешает определенное количество цифр с автоматическим разделением обратной косой черты для чисел.
ДД / ММ / ГГГГ (Я не собираюсь использовать средство выбора даты или библиотеку).





Попробуйте этот компонент реакции:
https://github.com/benhurott/react-native-masked-text
npm install react-native-masked-text --save
render() {
//the type is required but options is required only for some specific types.
return (
<TextInputMask
refInput = {(ref) => this.myDateText = ref;}
type = {'datetime'}
options = {{
format: 'DD-MM-YYYY HH:mm:ss'
}}
/>
)
}
есть один тип маски, который вам подходит:
datetime: использовать маску datetime с форматом момента (по умолчанию ДД / ММ / ГГГГ ЧЧ: мм: сс). Он принимает параметры (см. Далее в этом документе).
Вы можете использовать что-то вроде этого:
<TextInput
onChangeText = {(text) => this.handleTextChange({text})}
value = {this.state.text}
/>
В handleTextChange() сделайте все, что вам нужно, с вставленным текстом, а затем установите его в состояние
Возможно ли затем отредактировать дату - я могу изменить ее на статическую строку, но я не уверен, как добавить обратную косую черту с пустыми пробелами «_ _ / _ _ / _ _ _ _» и сделать ее доступной для редактирования? Так что пользователь начинает набирать номер, и он автоматически заменяет _ или даже просто пустое место на число.
checkValue(str, max) {
if (str.charAt(0) !== '0' || str == '00') {
var num = parseInt(str);
if (isNaN(num) || num <= 0 || num > max) num = 1;
str = num > parseInt(max.toString().charAt(0))
&& num.toString().length == 1 ? '0' + num : num.toString();
};
return str;
};
this.type = 'text';
var input = e.target.value;
var expr = new RegExp(/\D/$/);
if (expr.test(input)) input = input.substr(0, input.length - 3);
var values = input.split('/').map(function(v) {
return v.replace(/\D/g, '')
});
if (values[0]) values[0] = this.checkValue(values[0], 12);
if (values[1]) values[1] = this.checkValue(values[1], 31);
var output = values.map(function(v, i) {
return v.length == 2 && i < 2 ? v + '/' : v;
});
this.setState({
registrationDate:output.join('').substr(0, 14)
})
}
<input type = "text" className = "input-attr" maxLength = "25" onChange = {(e) => this.dateTimeInputChangeHandler(e)}
placeholder = {translationData.datePlaceholderText}
value = {this.state.registrationDate}/>
Вы можете реализовать это, используя что-то вроде этого. onchange поможет обработать ввод.
Это работает нормально, но при нажатии кнопки возврата "/" не удаляется. любые предложения по достижению этого.?
Вам необходимо внести изменения в метод dateTimeInputChangeHandler
да, я пытаюсь это сделать, но не смог этого добиться. Back Press работает нормально, но из-за этой функции я не могу применить изменения. var output = values.map (function (v, i) {return v.length == 2 && i <2? v + '/': v;});
@VivekKumar привет, я знаю, что прошло какое-то время, но я пытаюсь сделать то же самое в React Native, но по какой-то причине это не работает, не могли бы вы помочь мне.
Спасибо за Ваш ответ! Я видел эту библиотеку, но хотел узнать, знает ли кто-нибудь, как ее кодировать без использования библиотеки.