对于简单的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*");
}
使用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)
此模式适用于您提供的示例:
>([^@,;\] @[^@,;\] )|(?:$|\*[,;])(?:\*)(. *?)
([^@,;\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演示
由于您没有验证,我假设电子邮件地址是有效的。基于这个假设,我将查找一个电子邮件地址,后跟
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”。 我认为最好的办法是找到’@’符号的索引并在两个方向上搜索,直到命中字符串的末尾或有空格为止。谁能帮我实现这一实现? 问题答案: 您可以在字符串中搜