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

如何在Formik React中实现邮箱域名与动态白名单的实时校验

实现方案
  • 第一步:修复现有代码语法问题
    你原有邮箱输入框的name属性缺失开头双引号,修正为:
<FormikTextInput
  name="contactEmail"
  type="text"
  placeholder="example@domain.com"
/>
  • 第二步:添加全局实时校验逻辑
    因为你用了Formik框架,直接用其自带的validate校验能力即可,默认开启的validateOnChange配置可以支持不管是修改邮箱还是修改白名单字段,都会实时触发校验,完全符合边输入白名单边校验的需求。
    先写校验函数,逻辑是先提取邮箱的域名部分,再和当前所有已输入的白名单域名做完全匹配校验:
// 表单校验函数
const validateForm = (values) => {
  const errors = {};
  const contactEmail = values.contactEmail?.trim() || '';

  // 基础邮箱格式校验
  if (!contactEmail) {
    errors.contactEmail = '请输入邮箱地址';
    return errors;
  }
  const emailSplit = contactEmail.split('@');
  if (emailSplit.length !== 2) {
    errors.contactEmail = '请输入合法的邮箱格式';
    return errors;
  }
  const targetDomain = emailSplit[1].toLowerCase();
  // 过滤掉白名单里的空输入项,统一转小写避免大小写不匹配
  const validWhitelist = (values.EmailDomainlist || [])
    .map(domain => domain.trim().toLowerCase())
    .filter(Boolean);

  // 白名单为空时的提示,可按需求调整
  if (validWhitelist.length === 0) {
    errors.contactEmail = '请先添加邮箱域名白名单';
    return errors;
  }

  // 没有匹配的白名单域名则报错
  if (!validWhitelist.includes(targetDomain)) {
    errors.contactEmail = 'domain not matching';
    // 需要中文提示可替换为:'邮箱域名不在白名单范围内'
  }

  return errors;
};
  • 第三步:给Formik组件绑定校验函数
    将上面的校验函数传入Formik组件即可:
<Formik
  initialValues={{
    contactEmail: '',
    EmailDomainlist: [''] // 初始默认展示1个白名单输入框
  }}
  validate={validateForm}
  validateOnChange={true}
  onSubmit={(values) => {
    // 你的表单提交逻辑
  }}
>
  {/* 此处放你原有的表单结构代码,包括邮箱输入框、白名单动态输入组 */}
</Formik>
  • 第四步:错误提示展示
    确保你的FormikTextInput组件内部已做错误展示逻辑:从Formik上下文中取对应字段的errors和touched状态,字段被触碰过且有错误时,在输入框下方展示错误文本即可。

以上实现完全符合需求示例:比如邮箱填了lock@gmail.com,白名单输入y/o/p的过程中,校验时白名单里的内容是y/yo/yop,都和gmail.com不匹配,就会实时提示错误,只有完整输入gmail.com的时候才会通过校验不报错。

内容的提问来源于stack exchange,提问作者userrj_vj_051620

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:36:03