逗号分隔的电子邮件验证

时间:2013-09-01 06:32:11

标签: javascript ruby-on-rails-3.2 coffeescript

我使用以下链接验证电子邮件: 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块。在警报中,我收到了各个电子邮件但没有获得如何单独验证每封电子邮件。 有人可以帮我吗? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

尝试使用while语句。像这样:

sEmailArray = $("#invitation_email").val().split(',')
i = 0
email = undefined
while email = sEmailArray[i]
  if validateEmail(email)
  else
    alert email
  i++

答案 1 :(得分: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]上进行迭代{1}}而不是与数组索引匹配的[0]。我会使用for email in sEmail版本,而不是担心索引。

此外,String#split可以将正则表达式作为拆分模式,因此您可以在拆分时删除前导空格和尾随空格:

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

这样你就不必在循环中$.trim,而在调用validateEmail时你不会忘记修剪。

虽然我在这里,Regexp#test会返回truefalse,所以您不需要说:

if filter.test(sEmail)
  true
else
  false
你可以简单地说:

filter.test(sEmail)

所以只需要进行一些小改动,你应该拥有更干净,效果更好的东西。

演示:http://jsfiddle.net/ambiguous/SzzXV/