检查联系表单中电子邮件地址的格式
Posted
技术标签:
【中文标题】检查联系表单中电子邮件地址的格式【英文标题】:Checking the format of an email address in a contact form 【发布时间】:2012-04-28 00:39:35 【问题描述】:我正在使用带有姓名、电子邮件和评论字段的简单表单从网页发送消息。还有一个隐藏的标题字段,该字段应为空,以便提交表单 - 如果您愿意,可以进行垃圾邮件保护。
我在提交之前运行表单的 JQuery 代码可以正常工作,但目前只在电子邮件地址字段中寻找“@”字符。我想要的是更好地检查格式正确的电子邮件地址。
这是代码。
$(function()
$('.error').hide();
$(".button").click(function()
// validate and process form here
$('.error').hide();
var name = $("input#name").val();
if (name == "")
$("label#name_error").show();
$("input#name").focus();
return false;
var email = $("input#email").val();
if (!(email.indexOf('@') > 0))
$("label#email2_error").show();
$("input#email").focus();
return false;
var message = $("textarea#message").val();
if (message == "")
$("label#message_error").show();
$("textarea#message").focus();
return false;
var title = $("input#title").val()
if(title !== "")
$("input#title").focus();
return false;
var dataString = 'name='+ name + '&email=' + email + '&message=' + message;
//alert (dataString);return false;
$.ajax(
type: "POST",
url: "sendmail.php",
data: dataString,
success: function()
$('#message_form').html("<div id='response'></div>");
$('#response').html("<div id='content_success_block' class='shadow_box'>")
.append("<div id='success_image'><img src='assets/misc/success.png'></div>")
.append("<div id='success_text'>Thanks for contacting us! We will be in touch soon.</div>")
.append("</div>")
.hide()
.fadeIn(2500, function()
$('#response');
);
);
return false;
);
);
感谢任何帮助。
【问题讨论】:
祝你好运,哈哈,看这里regular-expressions.info/email.html ***.com/questions/8112329/jquery-email-regex ***.com/questions/2855865/… 【参考方案1】:最适合“我”的那个
function validEmail(v)
var r = new RegExp("[a-z0-9!#$%&'*+/=?^_`|~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`|~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
return (v.match(r) == null) ? false : true;
¡重要!
您真的应该阅读THIS。它提供了很多关于电子邮件正则表达式的信息,以及为什么没有真正好的“全部,全部结束”解决方案。简而言之,您必须确定最适合您的预期用户的内容。
合并
var email = $("input#email").val();
if (!validEmail(email))
$("label#email2_error").show();
$("input#email").focus();
return false;
您可以尝试的替代策略:我倾向于检查keypress timeout 上的电子邮件(因此,如果不是所有字段都准备好,则可以淡出提交按钮)
【讨论】:
谢谢,我怎么能把它整合到我已经拥有的东西中? 很好,我一定会尝试一下。 仅供参考,当提到keypress timeout
时,我指的是this technique
在尝试该代码后,如果我没有在“@”字符后包含一个错误,它会返回错误。但是,如果我在“@”之后键入任何字符序列,即使电子邮件地址不存在“.com”或其他域,它也不会返回错误。也许这是我在我发布的代码上方放置的函数的实现。
这就是为什么我包含链接“你应该阅读THIS”。如果您点击该链接并阅读整篇文章,您就会明白为什么“一个正则表达式来统治所有这些”对于电子邮件来说几乎是不可能的,因为电子邮件插件可以有多种形式。我提出的正则表达式是电子邮件检查的“最全包”,但如果您希望将其缩小到 .com 和/或 .net,则可以轻松添加到该正则表达式的末尾。包罗万象并检查细节实际上意味着多个正则表达式背靠背匹配,这可能会变得非常哈利,哈哈。【参考方案2】:
调用该文本框的 onBlur 事件函数,您想在其中检查有效电子邮件。
function validateForm()
var x = document.getElementById('txtEmail');
var atpos=x.value.indexOf("@");
var dotpos=x.value.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
alert("Not a valid e-mail address");
return false;
【讨论】:
【参考方案3】:只是陈述一个更明显的函数,它在测试电子邮件值时返回 true 或 false。使用regExp.test(value)
var emailIsValid = function(value)
var regex = new RegExp ("^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]2,3$");
return regex.test(value);
var email = $("input#email").val();
if (!emailIsValid(email))
$("label#email2_error").show();
$("input#email").focus();
return false;
【讨论】:
【参考方案4】:上述正则表达式 (SpYk3HH) 的问题在于它验证了以下内容:.me@gmail.c 我认为最好的方法是使用一些 ajax 来调用 PHP 函数(如果你确实使用 PHP)是这样的:
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
echo "Email Not Valid ! ";
【讨论】:
以上是关于检查联系表单中电子邮件地址的格式的主要内容,如果未能解决你的问题,请参考以下文章
使用文档对象在页面上创建学生信息表。 信息表包括学号姓名性别电子邮件联系电话个人主页和联系地址, 信息表内容通过表单输入,提交前先使用正则表达式进行验证,联系地址不能超过20