You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:05:44