当前位置: 首页 > 知识库问答 >
问题:

如何标记、扫描或拆分此电子邮件地址字符串

司英飙
2023-03-14

对于简单的Java邮件,我试图处理一种有一定自由度的分隔电子邮件地址格式。请注意,我并没有特别验证,只是从地址列表中获取地址。对于这个用例,可以假设地址是有效的。

以下是有效输入的示例:

"name@domain.com,Sixpack, Joe 1 <name@domain.com>, Sixpack, Joe 2 <name@domain.com> ;Sixpack, Joe, 3<name@domain.com> , nameFoo@domain.com,nameBar@domain.com;nameBaz@domain.com;"

因此,有两种基本形式“name@domain.com”和“乔·西帕克”,它们可以出现在逗号/分号分隔的字符串中,忽略空格填充。问题是名称可以包含分隔符作为有效字符。

以下数组显示了所需的数据(尾随空格或分隔符不会是大问题):

["name@domain.com",
"Sixpack, Joe 1 <name@domain.com>",
"Sixpack, Joe 2 <name@domain.com>",
"Sixpack, Joe, 3<name@domain.com>",
"nameFoo@domain.com",
"nameBar@domain.com",
"nameBaz@domain.com"]

我想不出一个干净的方法来处理这个问题。有什么建议可以帮助我可靠地识别逗号是名称的一部分还是分隔符?

最终解决方案(可接受答案的变化):

var string = "name@domain.com,Sixpack, Joe 1 <name@domain.com>, Sixpack, Joe 2 <name@domain.com> ;Sixpack, Joe, 3<name@domain.com> , nameFoo@domain.com,nameBar@domain.com;nameBaz@domain.com;"

// recognize value tails and replace the delimiters there, disambiguating delimiters
const result = string
  .replace(/(@.*?>?)\s*[,;]/g, "$1<|>")
  .replace(/<\|>$/,"") // remove trailing delimiter
  .split(/\s*<\|>\s*/) // split on delimiter including surround space

console.log(result)

或Java:

public static String[] extractEmailAddresses(String emailAddressList) {
    return emailAddressList
            .replaceAll("(@.*?>?)\\s*[,;]", "$1<|>")
            .replaceAll("<\\|>$", "")
            .split("\\s*<\\|>\\s*");
}

共有3个答案

郭易安
2023-03-14

使用Java的替换所有和拆分函数(在下面的javascript中模仿),我会说锁定你知道的结束一个项目(“. com”),用唯一的临时(uuid或类似的东西)替换分隔符

这是一个javascript示例,但是Java的repalceAll和拆分可以做同样的工作。

var string = "name@domain.com,Joe Sixpack <name@domain.com>, Sixpack, Joe <name@domain.com> ;Sixpack, Joe<name@domain.com> , name@domain.com,name@domain.com;name@domain.com;"


const result = string.replace(/(\.com>?)[\s,;]+/g, "$1<|>").replace(/<\|>$/,"").split("<|>")
console.log(result)

王叶五
2023-03-14

此模式适用于您提供的示例

>([^@,;\] @[^@,;\] )|(?:$|\*[,;])(?:\*)(. *?)

([^@,;\s]+@[^@,;\s]+)   # email defined by an @ with connected chars except ',' ';' and white-space
|                       # OR
(?:$|\s*[,;])(?:\s*)    # start of line OR 0 or more spaces followed by a separator, then 0 or more white-space chars
(.*?)                   # name
<([^@,;\s]+@[^@,;\s]+)> # email enclosed by lt-gt

PCRE演示

凌恩
2023-03-14

由于您没有验证,我假设电子邮件地址是有效的。基于这个假设,我将查找一个电子邮件地址,后跟

    var string = "name@domain.com,Sixpack, Joe 1 <name@domain.com>, Sixpack, Joe 2 <name@domain.com> ;Sixpack, Joe, 3<name@domain.com> , nameFoo@domain.com,nameBar@domain.com;nameBaz@domain.com;"



    const result = string.match(/(.*?@.*?\..*?)[,;]/g)
    console.log(result)

 类似资料:
  • 问题内容: 在PHP中,我有一个像这样的字符串: 我如何仅获取电子邮件地址?有什么简单的方法来获取价值? 问题答案: 如果您不确定用空格分隔的字符串的哪一部分是电子邮件地址,则可以将字符串按空格分隔并使用 在每个子串上。

  • 我正试图用Java中的扫描器将一个字符串分成另外两个字符串。好像不起作用。我只能通过谷歌找到扫描仪用来读取控制台输入的例子。我从扫描仪的手册中找出了我做事情的方式,我不确定我错了什么。 第一个和第二个是空白的,我不知道为什么。

  • 当我们收到一条包含收件人互联网地址(包含方括号)的mimessage时,我们得到了javax。邮政互联网AddressException:当我们调用MimeMessage时,本地地址在字符串中包含非法字符。getAllRecipients()。 下面的电子邮件地址是我们收到上述例外情况的一个示例:

  • 问题内容: 有谁知道如何在Swift中验证电子邮件地址?我发现此代码: 但我无法将其翻译为Swift。 问题答案: 我会用: 对于低于3.0的Swift版本: 对于低于1.2的Swift版本:

  • 问题内容: 我想在我的网站上使用自动填充/自动格式化的“收件人”字段,该字段的工作方式类似于GMail中的字段。 有谁知道jQuery这样的事情? 纯JavaScript?还是其他选择? 问题答案: 有很多的jquery位可以做到这一点,您可以在Google上搜索“ jquery autocomplete”,然后看看最喜欢哪个。 这是比较有名的一个:http : //docs.jquery.com

  • 问题内容: 我正在尝试从现有评论字段中提取电子邮件地址,并将其放入自己的列中。该字符串可能是这样的:“这是示例示例,电子邮件地址为someemail@domain.org”,或者从字面上看,电子邮件本身为“ someemail@domain.org”。 我认为最好的办法是找到’@’符号的索引并在两个方向上搜索,直到命中字符串的末尾或有空格为止。谁能帮我实现这一实现? 问题答案: 您可以在字符串中搜