在我的代码中添加简单的电子邮件验证,我创建了以下函数:
def isValid(email: String): Boolean = if("""(?=[^\s]+)(?=(\w+)@([\w\.]+))""".r.findFirstIn(email) == None)false else true
这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob @testmymail也会返回true.
我可能在这里很傻……
当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题. findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapplySeq并检查它是否返回Some List
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