我使用以下链接验证电子邮件: 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块。在警报中,我收到了各个电子邮件但没有获得如何单独验证每封电子邮件。 有人可以帮我吗? 提前谢谢。
答案 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
值将是整数,而整数不是电子邮件地址。你这么说:
如果我只发一封电子邮件,这是正确验证我的电子邮件。
但这不是真的,它失败了一个电子邮件地址或很多,你可以在这个演示中看到:
如果您想查看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
会返回true
或false
,所以您不需要说:
if filter.test(sEmail)
true
else
false
你可以简单地说:
filter.test(sEmail)
所以只需要进行一些小改动,你应该拥有更干净,效果更好的东西。