如何使用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,但我无法理解它。
答案 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.state
,this.onChange
...
<Form>
完整代码是这样的:
<Form
ref="form"
type={this.Person}
value={this.state.person}
onChange={(v) => this.onChange(v)}
options={this.options}
/>
希望这有帮助!