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

如果我只输入一封电子邮件,这将正确验证我的电子邮件。但是在我的电子邮件文本字段中,我必须放置许多逗号分隔的电子邮件,然后单独验证每封电子邮件。为此,我放了 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循环内的值将是整数,而整数不是电子邮件地址。你说:

如果我只输入一封电子邮件,这将正确验证我的电子邮件。

但这不是真的,它使用一个或多个电子邮件地址失败,正如您在此演示中看到的那样:

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 回答