在我的代码中添加简单的电子邮件验证,我创建了以下函数:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。