javascript - 键入时进行 TextInput 验证

标签 javascript android react-native

我有一个用于特定格式的电子邮件地址的 TextInput,并有一个正则表达式来验证它。我想在用户键入时验证它,并使用 TextInput 框中的确切值,但我没有得到这一点。

我所做的实际上是将验证添加到 TextInput 对象的 OnChangeText 方法中。该机制似乎有效,但它正在根据当前内容后面 1 个字母的内容进行验证。

例如:如果我输入“June”,它将仅验证“Jun”。如果我删除“e”,那么它将得到“June”,随后。

这是正确的吗?或者我可以在其他地方调用我的验证来达到预期的效果吗?

<TextInput
    placeholder='Type in your email'
    style={Styles.Input}
    onChangeText={(text) => {this.setLogin(text)}}
    value={ this.state.login }
    autoCompleteType={"email"}
    autoFocus={true}
/>
...
...
...
setLogin = (input) => {
    this.setState({login: input});
    console.log(this.state.login_regex.test(this.state.login));
    if (!this.state.login_regex.test(this.state.login)) {
        this.setState({login_msg: "Use an internal mail address"});
    } else {
        this.setState({login_msg: ""});
    };
};   

最佳答案

setState 是一个异步函数,这就是为什么 this.state.login 在测试时可能仍保留旧值。

您可以使用输入而不是状态值,如下所示

if (!this.state.login_regex.test(input)) {
  ...
}

或者您可以将回调函数作为第二个参数传递给 this.setState,如下所示

this.setState({login: input}, () => {
  if (!this.state.login_regex.test(this.state.login)) {
    ...
  }
});

但我通常推荐第一种方法。

关于javascript - 键入时进行 TextInput 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58906006/

相关文章:

android - Firebase Firestore toObject 在 bool 属性映射上失败

android - 每次 Activity 暂停和恢复时,StateFlow 都会发出

react-native - 如何安装 React Native 应用程序而不将其发布到任何商店?

javascript - 数组中的 Redux 项目的 id 正在更新

javascript - 如何在 if 语句中渲染某些内容 React Native

javascript - 在 Angular 中防止多个 $http 请求。有没有更好的办法?

javascript - jQuery:我如何记住侧面导航的单击选项卡并在新页面加载时使其着色(事件)?

javascript - jQuery .html 正在改变字体

javascript - 使用jquery获取点击元素的id

java - Android 中 Edittext 的实时搜索机制?