Scala中逗号分隔邮箱列表的验证实现方案
用Scala实现逗号分隔邮箱列表的验证功能
需求说明
需要验证逗号分隔的邮箱列表是否有效,具体示例:
- 有效列表:
a@gmail.com,b@gmail.com,c@gmail.com - 无效列表1:
a@gmail.com,b@@gmail.com,c@gmail.com(存在格式错误的邮箱) - 无效列表2:
a@gmail.com,b@gmail.com.c@gmail.com(缺少逗号分隔,单个元素不符合邮箱格式)
实现思路
- 将输入的邮箱列表字符串按逗号分割为单个邮箱条目
- 对每个条目做去空格和非空检查,排除连续逗号、首尾逗号产生的空元素
- 使用正则表达式验证单个邮箱的格式是否符合标准
代码实现
邮箱验证工具类
object EmailListValidator { // 覆盖常见邮箱格式的正则表达式 private val emailRegex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$".r /** * 验证逗号分隔的邮箱列表有效性 * @param emailList 逗号分隔的邮箱字符串 * @return 验证结果,true为有效,false为无效 */ def isValid(emailList: String): Boolean = { val emails = emailList.split(",").map(_.trim).filter(_.nonEmpty) emails.forall(emailRegex.matches(_)) } }
测试示例
object EmailValidationTest extends App { // 有效案例 println(EmailListValidator.isValid("a@gmail.com,b@gmail.com,c@gmail.com")) // 输出: true // 无效案例1:含格式错误的邮箱 println(EmailListValidator.isValid("a@gmail.com,b@@gmail.com,c@gmail.com")) // 输出: false // 无效案例2:缺少逗号分隔的错误格式 println(EmailListValidator.isValid("a@gmail.com,b@gmail.com.c@gmail.com")) // 输出: false // 额外测试:兼容连续逗号 println(EmailListValidator.isValid("a@gmail.com,,b@gmail.com")) // 输出: true // 额外测试:兼容首尾逗号 println(EmailListValidator.isValid(",a@gmail.com,b@gmail.com,")) // 输出: true }
补充说明
- 正则表达式支持用户名包含字母、数字及
._%+-特殊符号,域名部分支持多级域名(如mail.example.com) - 分割后自动去除邮箱前后空格,兼容用户输入时的格式不规范情况
内容的提问来源于stack exchange,提问作者user6714741
相关产品推荐
相关产品推荐

