在我的代码中添加简单的电子邮件验证,我创建了以下函数:
def isValid(email: String): Boolean = if("""(?=[^\s]+)(?=(\w+)@([\w\.]+))""".r.findFirstIn(email) == None)false else true
Run Code Online (Sandbox Code Playgroud)
这将通过电子邮件喜欢bob@testmymail.com
和失败的邮件bobtestmymail.com
,但邮件与空格字符滑过,就像bob @testmymail
也将返回true.
我可能在这里很傻......
Joh*_*ohn 22
我的功能灵感来自Play Framework使用的功能(请参阅PlayFramework)并使用此处提供的正则表达式:W3C推荐.希望能帮助到你.其他问题中建议的所有测试均通过.
private val emailRegex = """^[a-zA-Z0-9\.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$""".r
def check(e: String): Boolean = e match{
case null => false
case e if e.trim.isEmpty => false
case e if emailRegex.findFirstMatchIn(e).isDefined => true
case _ => false
}
Run Code Online (Sandbox Code Playgroud)
当我测试了您的正则表达式并且它正在捕获简单的电子邮件时,我检查了您的代码并发现您正在使用 findFirstIn。我相信这是你的问题。findFirstIn 将跳转所有空格,直到它与字符串中任意位置的某个序列匹配。我相信在你的情况下最好使用 unapplySeq 并检查它是否返回一些列表
def isValid(email: String): Boolean =
if("""(?=[^\s]+)(?=(\w+)@([\w\.]+))""".r.findFirstIn(email) == None)false else true
def isValid2(email: String): Boolean =
"""(\w+)@([\w\.]+)""".r.unapplySeq(email).isDefined
isValid("test@gmail.com") //> res0: Boolean = true
isValid("t es t@gmailcom") //> res1: Boolean = true
isValid("b ob @tes tmai l.com") //> res2: Boolean = false
isValid2("test@gmail.com") //> res3: Boolean = true
isValid2("t es t@gmailcom") //> res4: Boolean = false
isValid2("b ob @tes tmai l.com") //> res5: Boolean = false
// but those don't work for both:
// I recommend you using a proper regex pattern to match emails
isValid("test@gma.i.l.c.o.m") //> res6: Boolean = true
isValid("test@gmailcom") //> res7: Boolean = true
isValid2("test@gma.i.l.c.o.m") //> res8: Boolean = true
isValid2("test@gmailcom") //> res9: Boolean = true
Run Code Online (Sandbox Code Playgroud)