尝试使用字段配置在React-bootstrap表单上进行输入验证
const TextInput = (props) => {
const [text, setText] = useState('');
const {
type,
colProps,
register,
errors,
fieldInfo,
...restProps
} = props;
const { label, name, value, validation } = fieldInfo || {};
const validatePattern = (input) =>{
const regex = new RegExp(validation?.pattern?.value);
return regex.test(input)
}
return (
<Form.Group as={Col} {...colProps} >
{label}
<Form.Control
type ={type}
name={name}
value={value}
defaultValue = {fieldInfo?.defaultValue ?fieldInfo?.defaultValue:''}
{...restProps}
{...register(name, {
...validation
})}
isValid={validatePattern(value)}
/* tried doing this with onChange to track input but onChange doesnt fire... and value is always undefined */
/>
</Form.Group>
);
};
export default TextInput;
字符串
然后使用json configuration定义fieldInfo:
{
"type": "TEXT_INPUT",
"colProps": { "sm":"auto" },
"fieldInfo": {
"label": "Case Number",
"name": "caseNumber",
"validation" :{
"pattern": {
"value": "^[0-9]{8,12}$",
"message": "Input is Numeric, larger than 8, less than 13"
},
"required": {
"value": true,
"message": "Case number is required"
},
"maxLength": {
"value": 12,
"message": "Case number should be less than 13 chars."
}
}
}
}
型
required和maxLength验证有效,但模式不会触发错误。我可以调试并看到他们带来的信息浏览器-只是一个什么也不做。
如上所述,validatePattern只看到未定义的输入,即使我尝试useState并捕获输入的值。
- -在注册函数中添加了缺少的逗号。
2条答案
按热度按时间zd287kbt1#
你漏掉了一个逗号,不需要这个spreed
字符串
由于register函数需要一个字符串和一个对象进行验证,
所以从技术上讲,验证应该是这样的
型
jgwigjjp2#
在发布了这个之后,我想我可以将validate函数和onChange函数传递到register中。因此,为了工作,我更新了render中的register函数,并使用useState钩子处理输入。
字符串
然后,我可以不去管json配置,让团队使用它来设置正则表达式。其他验证也继续工作。