【问题标题】:sanitizing email input using react and es6使用 react 和 es6 清理电子邮件输入
【发布时间】:2018-01-28 08:10:11
【问题描述】:

我正在尝试检查我的状态并提取recEmail、cc 和bcc 的内容。在每个内部,您可以有多个电子邮件,由 , 分隔。例如

recEmail 可能有:email1@email.com、email2@email.com
cc 可能有:email3@email.com、email4@email.com

我正在使用 lodash 循环遍历“this.state”对象并将电子邮件推送到一个数组中,但是我必须循环遍历这个新数组以将电子邮件分成每个数组位置 1 封电子邮件(所以我可以运行一个正则表达式,看看它是否是一个有效的电子邮件)。

这种方法看起来很乱,我不禁想到有更好的方法来解决这个问题。这是我目前所拥有的。

  
  this.state = {recEmail: '', cc: '', bcc: '', subject: '', bodyText: '', testInput: false};
  
  stateCleaner(emails){
    var emailstoClean = [];
    _.forOwn(emails, (value, key) => {
      console.log('these are the keys: ', key);
      console.log('these are the values: ', value);
      if(key !== 'testInput'){
        emailstoClean.push(value.split(', '))
      }
    })
    console.log('final emailstoClean: ', emailstoClean);
    return emailstoClean
  }

这给了我 emailstoClean 数组索引 0 中的两封电子邮件,以及位置 1 中的两封电子邮件(我在 recEmail 中输入了两封,在 cc 字段中输入了两封)。

有没有一种方法可以进一步简化这个过程,只在每个数组索引中获取一封电子邮件?也可能它有点相关,但包括一个如何检查它是否是有效电子邮件的正则表达式也会很棒。如果有任何其他细节你们都需要,请告诉我。感谢大家的帮助。

【问题讨论】:

    标签: javascript arrays lodash email-validation


    【解决方案1】:

    有几件事:电子邮件出奇地复杂 - 快速的谷歌将确认正则表达式不是验证它们的最佳方法。

    对于要排列的电子邮件,您不需要 lodash 直接从您的状态属性中提取您的电子邮件字符串并在每个字符串上调用 split(',')。这将为您提供一系列电子邮件。对状态对象中的所有电子邮件项执行此操作,然后在数组上调用 concat 或使用新的扩展运算符将它们全部放入具有唯一索引的单个数组中。

    然后您可以使用 map、filter 或 some 来处理数组中的每个电子邮件地址。

    【讨论】:

    • 感谢您的回复。我希望有比拆分更优雅的东西,但我绝对愿意这样做。
    • 更优雅的解决方案是将电子邮件存储在您所在州的数组中。 React 可以很好地处理这个问题,并且您的状态通常可以更好地表示事物。查看 outlook.com 用户界面,了解如何输入和呈现多封电子邮件作为集合而不是字符串
    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2012-05-31
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多