11

コードに簡単な電子メール検証を追加して、次の関数を作成しました。

def isValid(email: String): Boolean = if("""(?=[^\s]+)(?=(\w+)@([\w\.]+))""".r.findFirstIn(email) == None)false else true

これは、のようなメールを通過させ、のようなbob@testmymail.comメールを失敗させbobtestmymail.comますが、スペース文字を含むメールはすり抜けて、のようbob @testmymailにtrueを返します。

私はおそらくここでばかげています...

4

5 に答える 5

25

私の関数は、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
}
于 2015-09-07T20:04:01.177 に答える
4

私はあなたの正規表現をテストし、それが単純な電子メールをキャッチしていたので、次にあなたのコードをチェックし、あなたがfindFirstInを使用していることを確認しました。それがあなたの問題だと思います。findFirstInは、文字列内の任意のシーケンスと一致するまで、すべてのスペースをジャンプします。あなたの場合は、una​​pplySeqを使用して、SomeListが返されるかどうかを確認する方がよいと思います。

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
于 2012-12-17T14:13:55.977 に答える
2
scala> def isValid(email : String): Boolean = if("""^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@([a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?\.)*(aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|[a-z][a-z])$""".r.findFirstIn(email) == None)false else true
v: (email: String)Boolean

scala> isValid("""bob@test.com""")
res0: Boolean = true

scala> isValid("""bob @test.com""")
res1: Boolean = false

scala> isValid("""bobtest.com""")  
res2: Boolean = false
于 2012-12-17T13:08:54.823 に答える
0
scala> val email4 = """([\w\.!#$%&*+/=?^_`{|}~-]+)@([\w]+)([\.]{1}[\w]+)+""".r
email4: scala.util.matching.Regex = ([\w\.!#$%&*+/=?^_`{|}~-]+)@([\w]+)([\.]{1}[\w]+)+

scala> email4.pattern.matcher("arun#eja-729@gmail..gov").matches
res10: Boolean = false

scala> email4.pattern.matcher("arun#eja-729@gmail.com.gov").matches
res11: Boolean = true

scala> email4.pattern.matcher("arun#eja-729@gmail.com.gov.in").matches
res12: Boolean = true

scala> email4.pattern.matcher("arun#eja-729@gmail.com.gov.in.").matches
res13: Boolean = false

scala> email4.pattern.matcher("arun#eja-729@gmail.com.").matches
res14: Boolean = false

scala> email4.pattern.matcher("arun#eja-729@gmail.com").matches
res15: Boolean = true

scala> email4.pattern.matcher("arun#eja-729@gmail..com").matches
res16: Boolean = false

scala> email4.pattern.matcher("arun#eja-729@gmail.ap.com").matches
res17: Boolean = true

scala> email4.pattern.matcher("arun#eja-729@gmail.ap.com.").matches
res18: Boolean = false
于 2020-02-04T04:42:37.173 に答える
0

以下は、最小10文字から最大30文字の長さの電子メールIDの正規表現です。

scala> val email4 = """[([\w\.!#$%&*+/=?^_`{|}~-]+)@([\w]+)([\.]{1}[\w]+)+]{10,30}""".r
email4: scala.util.matching.Regex = [([\w\.!#$%&*+/=?^_`{|}~-]+)@([\w]+)([\.]{1}[\w]+)+]{10,30}

scala> email4.pattern.matcher("ar@g.com").matches
res19: Boolean = false

scala> email4.pattern.matcher("ar@gmail.com").matches
res20: Boolean = true

scala> email4.pattern.matcher("ar1234567890@gmail1234567890.com").matches
res21: Boolean = false

scala> email4.pattern.matcher("ar1234567890@gmail123456780.com").matches
res22: Boolean = false

scala> email4.pattern.matcher("ar1234567890@gma.com").matches
res23: Boolean = true

scala> email4.pattern.matcher("ar1234567890@gmghfjdfcga.com").matches
res24: Boolean = true

scala> email4.pattern.matcher("ar1234567890@gmghfjdfcga1.com").matches
res25: Boolean = true

scala> email4.pattern.matcher("ar1234567890@gmghfjdfcga111.com").matches
res26: Boolean = false

scala> email4.pattern.matcher("ar1234567890@gmghfjdfcga11.com").matches
res27: Boolean = true
于 2020-02-04T04:47:20.660 に答える