使用tcomb-form-native验证字符串相等性(确认密码)

时间:2017-09-27 11:24:26

标签: validation react-native tcomb-form-native

如何使用tcomb-form-native库验证我的confirmPassword字段?

电子邮件和密码字段非常简单,但我不知道如何与模型中另一个字段的现有值进行比较。

这是我的代码。

const Email = t.refinement(t.String, (email) => {
  const reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
  return reg.test(email);
});

const Password = t.refinement(t.String, (password) => {
  const reg = /^(?=\S+$).{8,}$/;
  return reg.test(password);
});

const RegistrationData = t.struct({
  email: Email,
  password: Password,
  confirmPassword: t.String // Need some equality check
});

我调查了文档https://github.com/gcanti/tcomb-form-native#disable-a-field-based-on-another-fields-value,但我无法理解它。

1 个答案:

答案 0 :(得分:8)

这是我的解决方案:

首先,在类构造函数←[31msampleText←[0m 中定义一个将用于密码检查的类型。

this.samePassword

比,在表单定义中使用this.samePassword = t.refinement(t.String, (s) => { return s == this.state.person.user_password; }); 类型

this.samePassword

接下来,准备一个this.Person = t.struct({ user_id: t.String, user_password: t.String, reenter_password: this.samePassword, }); 函数来处理文本更改并保存到状态。 onChange是一个变量,表示表单是否已输入。

this.validate

最后,在onChange(person) { this.setState({ person }); if(person.reenter_password != null && person.reenter_password != "") { this.validate = this.refs.form.getValue(); } }

上挂钩this.statethis.onChange ...
<Form>

完整代码是这样的:

<Form
    ref="form"
    type={this.Person}
    value={this.state.person}
    onChange={(v) => this.onChange(v)}
    options={this.options}
/> 

希望这有帮助!