如何在Ant Design中配置多正则规则验证NIF/NIE输入?
实现Ant Design多正则规则校验NIF/NIE格式
你当前代码里的写法有问题:pattern: /^[XYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/i || /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKE]$/i 不会生效,因为JavaScript中第一个正则对象会被判定为真值,实际只会用第一个正则做校验,完全忽略第二个规则。
下面提供两种可行的实现方式:
方案1:合并正则表达式
把两种格式的正则用|合并成一个规则,一次性匹配两种合法格式:
<Form.Item name="nifnie" label="NIF/NIE" rules={[ { required: true, message: "NIF/NIE是必填项。" }, { pattern: /^(?:[XYZ][0-9]{7}|[0-9]{8})[TRWAGMYFPDXBNJZSQVHLCKE]$/i, message: "格式无效,请输入正确的NIF/NIE。", }, ]} > <Input /> </Form.Item>
这里用非捕获组(?:...)包裹两种前缀规则,通过|分隔,让正则可以匹配「XYZ开头+7位数字+校验码」或者「8位数字+校验码」两种格式。
方案2:自定义validator校验函数
如果需要更灵活的逻辑(比如后续要针对不同格式给出不同提示),可以用Ant Design的自定义校验器:
<Form.Item name="nifnie" label="NIF/NIE" rules={[ { required: true, message: "NIF/NIE是必填项。" }, ({ getFieldValue }) => ({ validator(_, value) { const niePattern = /^[XYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/i; const nifPattern = /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKE]$/i; if (!value) return Promise.resolve(); if (niePattern.test(value) || nifPattern.test(value)) { return Promise.resolve(); } return Promise.reject(new Error("格式无效,请输入正确的NIF/NIE。")); }, }), ]} > <Input /> </Form.Item>
这种方式会分别测试两个正则,只要满足其中一个就通过校验,否则抛出错误提示,适合需要扩展校验逻辑的场景。
内容的提问来源于stack exchange,提问作者Andreu
相关产品推荐
相关产品推荐

