const_wjm 2024-08-01 00:33 采纳率: 40%
浏览 11
已结题

对email表单做了一般邮箱正则校验,现在需要额外输入为hotmail或outlook、gmail时做特定邮箱校验,不符合提示出来。并且保证不影响其他正确的邮箱格式通过校验,通过不会提示。

var regexEmail = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;


function validateEmail(rule: any, value: any) {
  const result = rule.rule.test(value);
  return result;
}

{
  key: 'email',
  type: 'Input',
  required: true,
  verifies: [
    {
      required: true,
      transform: transformField,
      message: '为空',
    },
    {
      rule: regexEmail,
      validator: validateEmail,
      message: '输入有误',
    }, 
  ],      }。

已经实现了对一般邮箱的正则校验,对不符合的情况做了对应提示。
现在需要额外再加个要求,当输入为hotmail或者outlook或者gmail时需要对这三个邮箱做特定的正则校验,
当这三个特定邮箱不符合正则校验的话会提示'错误'。
而且不影响其他邮箱校验通过,如果输入的是这三个之外的其他邮箱,只要格式符合一般邮箱的正则校验就不会提示错误。

  • 写回答

10条回答 默认 最新

  • 栗筝i Java领域优质创作者 2024-08-01 00:34
    关注

    以下回答参考自‘文心一言’由‘栗筝i’整理回复、有用望采纳:

    为了实现您的需求,我们可以为特定的邮箱服务商(hotmail, outlook, gmail)定义额外的正则表达式,并在验证函数中检查邮箱是否属于这些服务商之一,然后应用相应的正则表达式进行校验。如果邮箱不属于这些特定服务商,则使用现有的通用邮箱正则表达式进行校验。

    以下是修改后的代码示例:

    var regexEmail = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
    var regexGmail = /^[\w-\.]+@gmail\.com$/;
    var regexOutlook = /^[\w-\.]+@(outlook|hotmail)\.com$/;
    
    function validateEmail(rule: any, value: string) {
      // 检查是否为gmail或outlook/hotmail
      if (regexGmail.test(value)) {
        // 对gmail做特定校验
        return regexGmail.test(value) ? true : '错误';
      } else if (regexOutlook.test(value)) {
        // 对outlook或hotmail做特定校验
        return regexOutlook.test(value) ? true : '错误';
      } else {
        // 对其他邮箱使用通用校验
        return rule.rule.test(value) ? true : '输入有误';
      }
    }
    
    const emailValidation = {
      key: 'email',
      type: 'Input',
      required: true,
      verifies: [
        {
          required: true,
          transform: transformField, // 假设transformField是已经定义好的函数
          message: '邮箱不能为空',
        },
        {
          rule: regexEmail,
          validator: validateEmail,
          message: '邮箱格式错误',
        },
      ],
    };
    
    // 假设transformField函数已经定义,这里不需要实际实现
    function transformField(value) {
      // 可以在这里对value进行转换,例如去除首尾空格等
      return value.trim();
    }
    
    // 示例使用
    console.log(validateEmail({ rule: { rule: regexEmail } }, 'example@gmail.com')); // 应该返回 true 或 '错误'
    console.log(validateEmail({ rule: { rule: regexEmail } }, 'example@outlook.com')); // 应该返回 true 或 '错误'
    console.log(validateEmail({ rule: { rule: regexEmail } }, 'example@example.com')); // 应该返回 true
    

    注意

    1. 我假设了transformField函数已经定义,但在实际中您可能需要根据实际情况来实现它。
    2. 我修改了validateEmail函数以支持对特定邮箱服务商的校验,并在校验失败时返回错误消息。
    3. 我修改了emailValidation对象中的message字段,以更准确地反映邮箱格式错误的情况。
    4. 确保在实际应用中处理好用户输入,避免XSS攻击等安全问题。
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月1日
  • 修改了问题 8月1日
  • 修改了问题 8月1日
  • 创建了问题 8月1日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?