如何使用JQuery验证电子邮件地址?
如何使用JQuery验证电子邮件地址?
你可以使用普通的JavaScript来做到这一点:
function isEmail(email) {
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
}
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
更改为 var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,6})+$/;
以支持像.museum等新TLD。 - Ira HermanjQuery验证电子邮件的函数
我不喜欢使用插件,特别是当我的表单只有一个需要验证的字段时。 我使用这个函数,在需要验证电子邮件表单字段时调用它。
function validateEmail($email) {
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
return emailReg.test( $email );
}
现在可以使用这个了
if( !validateEmail(emailaddress)) { /* do stuff here */ }
emailReg.test($email);
。 - nffdiogosilvaemailReg.text("")
返回 true
。我建议将函数简化为只声明emailReg
变量和以下内容:return ($email.length > 0 && emailReg.test($email))
。请注意保持原文意思不改变,并使翻译更加通俗易懂。 - Dizietvar emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
更改为var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
。 - Theo请查看http://bassistance.de/jquery-plugins/jquery-plugin-validation/。这是一个很好的jQuery插件,可以帮助您为表单构建强大的验证系统。 这里有一些有用的示例。因此,表单中的电子邮件字段验证将如下所示:
$("#myform").validate({
rules: {
field: {
required: true,
email: true
}
}
});
请参见电子邮件方法文档以获取详细信息和示例。
x@x
(这很奇怪),必须要是x@x.x
。我该如何解决? - Basheer AL-MOMANI$.validator.methods.email = function( value, element ) { return this.optional( element ) || //^.+@.+\..+$/.test( value ); }
- Bill Gillingham我会使用jQuery验证插件,原因有几个。
你已经完成了验证,那么接下来呢?你需要显示错误信息,并在有效时处理清除它,也许还要显示总共有多少个错误?它可以为你处理很多事情,无需重新发明轮子。
此外,另一个巨大的好处是它托管在CDN上,目前版本在回答时可以在这里找到:http://www.asp.net/ajaxLibrary/CDNjQueryValidate16.ashx 这意味着客户端加载时间更快。
<script type="text/javascript">
$(document).ready(function() {
$('.form_error').hide();
$('#submit').click(function(){
var name = $('#name').val();
var email = $('#email').val();
var phone = $('#phone').val();
var message = $('#message').val();
if(name== ''){
$('#name').next().show();
return false;
}
if(email== ''){
$('#email').next().show();
return false;
}
if(IsEmail(email)==false){
$('#invalid_email').show();
return false;
}
if(phone== ''){
$('#phone').next().show();
return false;
}
if(message== ''){
$('#message').next().show();
return false;
}
//ajax call php page
$.post("send.php", $("#contactform").serialize(), function(response) {
$('#contactform').fadeOut('slow',function(){
$('#success').html(response);
$('#success').fadeIn('slow');
});
});
return false;
});
});
function IsEmail(email) {
var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if(!regex.test(email)) {
return false;
}else{
return true;
}
}
</script>
<form action="" method="post" id="contactform">
<table class="contact-table">
<tr>
<td><label for="name">Name :</label></td>
<td class="name"> <input name="name" id="name" type="text" placeholder="Please enter your name" class="contact-input"><span class="form_error">Please enter your name</span></td>
</tr>
<tr>
<td><label for="email">Email :</label></td>
<td class="email"><input name="email" id="email" type="text" placeholder="Please enter your email" class="contact-input"><span class="form_error">Please enter your email</span>
<span class="form_error" id="invalid_email">This email is not valid</span></td>
</tr>
<tr>
<td><label for="phone">Phone :</label></td>
<td class="phone"><input name="phone" id="phone" type="text" placeholder="Please enter your phone" class="contact-input"><span class="form_error">Please enter your phone</span></td>
</tr>
<tr>
<td><label for="message">Message :</label></td>
<td class="message"><textarea name="message" id="message" class="contact-input"></textarea><span class="form_error">Please enter your message</span></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" class="contactform-buttons" id="submit"value="Send" />
<input type="reset" class="contactform-buttons" id="" value="Clear" />
</td>
</tr>
</table>
</form>
<div id="success" style="color:red;"></div>
在使用Fabian的答案时,我遇到的问题是在MVC视图中实现它,因为有Razor @
符号。您必须包含一个额外的@
符号来转义它,如下所示:@@
function isEmail(email) {
var regex = /^([a-zA-Z0-9_.+-])+\@@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
}
我在这个页面上没有看到它,所以我认为这可能会有帮助。
这是微软的一个链接,描述了它的用法。
我刚刚测试了上面的代码,并得到了以下js:
function validateEmail(email) {
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
}
它正在准确地执行它应该执行的任务。
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
。你的代码出了什么问题? - Trevor Nestman.cshtml
中生成正则表达式中的@
符号。通常它会尝试将@
符号后面的所有内容视为Razor代码,但双重的@@
可以防止这种情况发生。 - Trevor Nestman
<!-- Dont forget to include the jQuery library here -->
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#validate").keyup(function(){
var email = $("#validate").val();
if(email != 0)
{
if(isValidEmailAddress(email))
{
$("#validEmail").css({
"background-image": "url('validYes.png')"
});
} else {
$("#validEmail").css({
"background-image": "url('validNo.png')"
});
}
} else {
$("#validEmail").css({
"background-image": "none"
});
}
});
});
function isValidEmailAddress(emailAddress) {
var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
return pattern.test(emailAddress);
}
</script>
<style>
#validEmail
{
margin-top: 4px;
margin-left: 9px;
position: absolute;
width: 16px;
height: 16px;
}
.text
{
font-family: Arial, Tahoma, Helvetica;
}
</style>
<title>Live Email Validation with jQuery Demo</title>
</head>
<body>
<div class="text"><h1>Reynoldsftw.com - Live Email Validation</h1><h2>Type in an email address in the box below:</h2></div>
<div><input type="text" id="validate" width="30"><span id="validEmail"></span></div>
<div class="text"><P>More script and css style
来源:htmldrive.com
function isValidEmailAddress(emailAddress) {
var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i;
return pattern.test(emailAddress);
};
if( !isValidEmailAddress( emailaddress ) ) { /* do stuff here (email is invalid) */ }
这段内容来自用户Luca Filosofi在此回答中提供
@
字符对@
字符进行转义,即使用@@
。否则,将导致构建错误。 - Rosdi Kasim我建议使用Verimail.js,它还有一个JQuery插件。
为什么?Verimail支持以下功能:
因此,除了验证外,Verimail.js还提供建议。因此,如果您键入具有错误TLD或域的电子邮件,该域非常类似于常见的电子邮件域(hotmail.com,gmail.com等),它可以检测到并建议更正。
示例:
等等……
要将其与jQuery一起使用,只需在您的网站上包含 verimail.jquery.js 并运行下面的函数:
$("input#email-address").verimail({
messageElement: "p#status-message"
});
消息元素是一个用于显示消息的元素。这可以是任何内容,从“您的电子邮件无效”到“你是否指的是……?”。
如果您有一个表单,并希望限制它,以便除非电子邮件有效,否则无法提交,那么您可以使用 getVerimailStatus 函数来检查状态,如下所示:
if($("input#email-address").getVerimailStatus() < 0){
// Invalid
}else{
// Valid
}
该函数根据对象Comfirm.AlphaMail.Verimail.Status返回一个整数状态码。但是一般的经验法则是,任何小于0的代码都表示错误。
.getVerimailStatus()
不会返回数字状态码,只会返回字符串值 success
、error
或者可能是 pending
(最后一个没有验证)。 - Niko Nyman正如其他人所提到的,您可以使用正则表达式来检查电子邮件地址是否符合模式。但是,仍然可能存在符合模式但仍然会弹回或是虚假垃圾邮件的电子邮件。
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
您可以使用API来检查电子邮件地址是否真实并且目前处于活动状态。
var emailAddress = "foo@bar.com"
response = $.get("https://isitarealemail.com/api/email/validate?email=" +
emailAddress,
function responseHandler(data) {
if (data.status === 'valid') {
// the email is valid and the mail box is active
} else {
// the email is incorrect or unable to be tested.
}
})
更多信息请参见https://isitarealemail.com或博客文章