У меня есть textinput
, и я хочу проверить вводимые пользователем данные, прежде чем они появятся на textinput
.
Я пробовал использовать для этого регулярное выражение, но у меня проблема со следующим кодом:
_onChangeHP(hp){
console.log('hp', hp)
let reg = /^08[0-9]{9,}$/
if(reg.test(hp)){
this.setState({noHP:hp})
}
}
<TextInput
value={this.state.noHP}
maxLength={13}
placeholder={'08xxxxxxxxx'}
keyboardType="numeric"
onChangeText={(text)=>this._onChangeHP(text)}
/>
Функция _onChangeHP()
проверяется один за другим, поэтому regex pattern
никогда не передает значение true в if statement
,
Есть ли способ проверить ввод данных пользователем?
Мой ожидаемый результат - setState
, когда первая строка пользовательского значения - 0
, а вторая строка - 8
, а остальная - только числовые,
2 ответа
Вы можете использовать функцию шаблона, где число может быть условным.
<input maxLength={13} placeholder='08xxxxxxxxx' keyboardType="numeric"
pattern="[0][8][0-9]{11}" />
Вы не можете сделать это только с одним регулярным выражением
_onChangeHP('08')
_onChangeHP('01')
_onChangeHP('08222222')
function _onChangeHP(hp){
let regStartsWith = new RegExp('^08', 'i');
let regAfter = /^\d+$/;
if(regStartsWith.test(hp)){ // this will check if starts with 08
if(regAfter.test(hp.substring(2))){
console.log(true) // this will check if hp has number after 08
return true;
}
else{
console.log(false);
return false;
}
}
else{
console.log(false);
return false;
}
}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
textinput
мне нужно проверять одну за другой каждую строку, когда пользователь вводит 0, и проверять_onChangeHP()
, он никогда не войдет вif statement
, другими словами, textinput вернет ложь навсегда