0

メールの検証に次のリンクを使用しています: http://jquerybyexample.blogspot.com/2011/04/validate-email-address-using-jquery.html

この関数を使用して、js を使用してメール アドレスを検証しています。

validateEmail = (sEmail) ->
  filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
  if filter.test(sEmail)
    true
  else
    false
$(document).ready (e) ->
  $("#invitation_form").submit ->
    sEmail = $("#invitation_email").val().split(',')
    email=0
    for email in [0..sEmail.length]
      if $.trim(email).length is 0
        $("h2").append("<div class='alert alert-error'>Please review the problems below</div>")
        $("#invitation_email").attr("placeholder", "Email can't be blank")
        return false
      if validateEmail(email)
      else
        alert sEmail
        email++
        # $("h2").append("<div class='alert alert-error'>Please review the problems below</div>");
        # $("#invitation_email").val('')
        # $("#invitation_email").attr("placeholder", "Please enter valid email")
        # return false

電子メールを 1 つだけ入力した場合、これは電子メールを適切に検証しています。しかし、私の電子メール テキスト フィールドには、コンマで区切られた多数の電子メールを入力し、各電子メールを個別に検証する必要があります。そのために、split(',') を配置し、for ループを追加しましたが、検証は適切に行われません。「example1@email.com、example2@email.com」と入力すると、無効なメール用のelseブロックに入ります。アラートでは、個々のメールを受信して​​いますが、各メールを個別に検証する方法がわかりません。誰かがこれで私を助けてくれますか? 前もって感謝します。

4

2 に答える 2

0

代わりに while ステートメントを使用してみてください。このような:

sEmailArray = $("#invitation_email").val().split(',')
i = 0
email = undefined
while email = sEmailArray[i]
  if validateEmail(email)
  else
    alert email
  i++
于 2013-09-01T07:15:40.480 に答える
0

あなたがこれを言うとき:

for email in [0..sEmail.length]

あなたが言っている:

for email in an_array_of_numbers

したがって、emailそのループ内の値は整数になり、整数は電子メール アドレスではありません。あなたはこう言います:

電子メールを 1 つだけ入力した場合、これは電子メールを適切に検証しています。

このデモでわかるように、1 つまたは複数のメール アドレスで失敗します。

http://jsfiddle.net/ambiguous/7LFus/

の電子メール アドレスを確認する場合はsEmail、次のことが必要です。

for i in [0...sEmail.length]
  email = sEmail[i]
  #...

またはそれ以上:

for email in sEmail
  #...

最初のバージョンでは...の代わりに が使用されることに注意してください。上限が含まれているため、 が配列のインデックスに一致するのではなく、反復処理を行うものである場合に..注意してください。インデックスについて心配するよりも、バージョンを使用します。..sEmail.length[0, 1][0]for email in sEmail

また、String#split正規表現を分割パターンとして使用できるため、分割中に先頭と末尾の空白を削除できます。

sEmail = $("#invitation_email").val().split(/\s*,\s*/)

そうすれば$.trim、ループ内に入る必要がなくなり、呼び出し時にトリムを忘れることもありませんvalidateEmail

私がここにいる間、Regexp#test戻ってきtrueますfalseので、次のように言う必要はありません。

if filter.test(sEmail)
  true
else
  false

あなたは簡単に言うことができます:

filter.test(sEmail)

そのため、いくつかの小さな変更を加えるだけで、よりクリーンでより適切に機能するものを手に入れることができます。

デモ: http://jsfiddle.net/ambiguous/SzzXV/

于 2013-09-01T17:27:11.060 に答える