我正在制作一个非常简单的电子邮件验证脚本,基本上只是检查以下内容
我知道还有更多检查,但我看看这些正则表达式规则,我的思维停止工作。我想如果我从像这样小的东西开始,我可以将我的大脑包裹在更复杂的规则中。
目前正在使用一些jquery,我会执行以下操作:
var booking_email = $('input[name=booking_email]').val();
if(booking_email == '' || booking_email.indexOf('@') == -1 || booking_email.indexOf('.') == -1) {
// perform my alert
}
这足以阻止90%的虚假电子邮件到目前为止...我只想让它更有效,因为目前我的规则将允许电子邮件,如“@ domain.com”或“user @ domain”。因为它只检查是否有一个fullstop和一个@符号。
感谢您的任何提示。
答案 0 :(得分:62)
其他人的建议应该可以正常工作,但如果你想保持简单,试试这个:
var booking_email = $('input[name=booking_email]').val();
if( /(.+)@(.+){2,}\.(.+){2,}/.test(booking_email) ){
// valid email
} else {
// invalid email
}
即使您决定使用更强大的功能,它也应该有助于您了解正则表达式的简单程度。 :)
答案 1 :(得分:38)
您使用此RegExp /^.+@.+\..+$/
进行的最少贪婪验证
它只会确保地址符合您提到的最基本要求:@之前的字符以及域部分中点之前和之后的字符。验证更多可能是错误的(您总是有可能将有效的电子邮件列入黑名单)。
像这样使用它:
var is_valid_email = function(email) { return /^.+@.+\..+$/.test(email); }
答案 2 :(得分:2)
RegexLib.com(http://regexlib.com/Search.aspx?k=email)有数百个电子邮件验证例程。我建议您阅读这篇文章:http://www.unwrongest.com/blog/email-validation-regular-expressions/如果您决定继续使用正则表达式进行验证,我最喜欢的测试实用程序是免费的正则表达式设计器,可以在这里免费使用:http://www.radsoftware.com.au/regexdesigner/ ...测试所有电子邮件在一个很大的列表中(可以免费下载或购买......或者使用你自己当前的数据库),以确保你的约束中的正则表达式是可以接受的。
我会推荐一个基本的测试(很多在regexlib.com的顶部......我不会因为我经常使用他们的工作而受到赞誉),接下来是需要用户交互的电子邮件验证例程。这是“验证”电子邮件地址的唯一真实方式。
答案 3 :(得分:1)
尝试:
function valid_email(email) {
return email.match(/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i);
}
根据this article,这是最佳可用电子邮件验证正则表达式。我推荐使用它,除非你的目标非常简单但不完全兼容。
答案 4 :(得分:0)
电子邮件很难测试,但您可以进行一些限制性但简单的电子邮件验证。我自己使用这个,它可以确保它有95%的电子邮件地址。
var simpleValidEmail = function( email ) {
return email.length < 256 && /^[^@]+@[^@]{2,}\.[^@]{2,}$/.test(email);
};
我会推荐这个简单的&#39;验证
要了解为什么这很难解决,请参阅:How to validate an email address using a regular expression?
更新:更正了正则表达式
答案 5 :(得分:0)
如果您只想检查商务电子邮件,请尝试以下操作:
<script type="text/javascript">
$(document).ready(function(e){
$('#sendReq').click(function(){
var email = $('#emailAddress').val();
var reg = /^([\w-\.]+@(?!gmail.com)(?!yahoo.com)(?!hotmail.com)(?!yahoo.co.in)(?!aol.com)(?!abc.com)(?!xyz.com)(?!pqr.com)(?!rediffmail.com)(?!live.com)(?!outlook.com)(?!me.com)(?!msn.com)(?!ymail.com)([\w-]+\.)+[\w-]{2,4})?$/;
if (reg.test(email)){
return 0;
}
else{
alert('Please Enter Business Email Address');
return false;
}
});
});
</script>
答案 6 :(得分:0)
基于此之前的Ian Christian Myers答复,此答案添加了+号,并扩展到tld中包含超过4个字符
function validateEmail(email) {
const regex = /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,15}$/;
return regex.test(email);
}
答案 7 :(得分:0)
npm 上的 is-email
包是 super simple,如果有点松,就:
var matcher = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
function isEmail(string) {
return matcher.test(string);
}
它是由处理大量电子邮件的 segment.io 编写的。
答案 8 :(得分:-1)
你可以试试这个:
var booking_email = $('input[name=booking_email]').val();
if(booking_email.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/)) {
// valid email
} else {
// not valid
}