У меня есть 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, а остальная - только числовые,

0
flix 28 Окт 2019 в 14:26

2 ответа

Вы можете использовать функцию шаблона, где число может быть условным.

<input  maxLength={13} placeholder='08xxxxxxxxx' keyboardType="numeric"
      pattern="[0][8][0-9]{11}"  />
0
KMS 28 Окт 2019 в 14:36

Вы не можете сделать это только с одним регулярным выражением

_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;
        }
      }
0
Onur Gelmez 28 Окт 2019 в 15:21
Из-за моей проблемы с textinput мне нужно проверять одну за другой каждую строку, когда пользователь вводит 0, и проверять _onChangeHP(), он никогда не войдет в if statement, другими словами, textinput вернет ложь навсегда
 – 
flix
29 Окт 2019 в 05:24