【发布时间】:2021-04-22 02:06:12
【问题描述】:
我有一个包含firstName 和lastName 的简单表单。
<label htmlFor="firstName">First Name: </label>
<input
type="text"
className="form-control"
id="firstName"
name="firstName"
value={basicDetails.firstName}
onChange={(event) => handleInputChange(event)}
/>
<label htmlFor="lastName">Last Name: </label>
<input
type="text"
className="form-control"
id="lastName"
name="lastName"
value={basicDetails.lastName}
onChange={(event) => handleInputChange(event)}
/>
为此,我正在尝试添加验证。
验证规则是,
- 两个字段都应该只接受文本
- 名字是必填项,至少应包含 4 个字符。
- 如果姓氏字段有值,则至少需要 3 个字符。
我试图实现的目标,
components/utils.js
export function isLettersOnly(string) {
return /^[a-zA-Z]+$/.test(string);
}
components/basic_details.js
const handleInputChange = (event) => {
const { name, value } = event.target;
if (!isLettersOnly(value)) {
return;
}
setValue((prev) => {
const basicDetails = { ...prev.basicDetails, [name]: value };
return { ...prev, basicDetails };
});
};
在句柄输入字段上,我正在进行验证以检查输入是否具有值,但我无法理解如何捕捉实际验证错误并显示在相应的输入框下方。
请帮我在各个字段上显示验证消息。
工作示例:
【问题讨论】:
-
您的所有验证规则都可以单独使用 HTML 完成。检查
required、minlength和pattern属性。 -
@Evert,现在说清楚,我已经制定了这些验证规则,但实际上我会有更多的验证。我坚持只在 react 的 javascript 部分进行验证,因为需要改变..
-
您希望何时进行字段验证?每次改变?在现场 onBlur?中间验证是否应该阻止您的上下文/状态更新?
-
希望被称为
Tom或Amy的人不想使用您的系统... -
@DrewReese,是的,验证需要在输入更改时进行,即(输入脏).. 是的,中间验证可以防止上下文/状态更新.. 我们还应该移动
<input>作为一个单独的组件兄弟,因为我觉得我在这里重复了一些事情..
标签: javascript html reactjs forms validation