使用javascript进行超级简单的电子邮件验证
我正在制作一个非常简单的电子邮件验证脚本,基本上只检查以下内容使用javascript进行超级简单的电子邮件验证,javascript,jquery,Javascript,Jquery,我正在制作一个非常简单的电子邮件验证脚本,基本上只检查以下内容 电子邮件不是空白的 电子邮件包含一个@符号,前面至少有一个字符 有一个域ie@后面至少有2个字母 以句号结尾,后面至少有2个字母 我知道还有很多支票,但我看着这些正则表达式规则,我的大脑停止了工作。我想如果我从像这样的小事情开始,我也许能够把我的大脑围绕在更复杂的规则上 目前,我使用一些jquery执行以下操作: var booking_email = $('input[name=booking_email]').val();
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.'因为它只检查是否有句号和@符号
谢谢你的提示。你可以试试这个:
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
}
var booking_email = $('input[name=booking_email]').val();
if( /(.+)@(.+){2,}\.(.+){2,}/.test(booking_email) ){
// valid email
} else {
// invalid email
}
其他人的建议应该行得通,但如果你想让事情保持简单,请尝试以下方法:
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
}
var booking_email = $('input[name=booking_email]').val();
if( /(.+)@(.+){2,}\.(.+){2,}/.test(booking_email) ){
// valid email
} else {
// invalid email
}
即使您决定使用更健壮的正则表达式,它也会帮助您理解正则表达式有时是多么简单。:) 最不可能的贪婪验证是使用这个RegExp
/^.+@.+\..+$/
它只会确保地址符合您提到的最基本要求:域部分中@前面的字符和点前后的字符。验证更多的内容可能是错误的(你总是有机会将有效的电子邮件列入黑名单) 像这样使用它:
var is_valid_email = function(email) { return /^.+@.+\..+$/.test(email); }
尝试:
这是可用的最好的电子邮件验证正则表达式。我建议您使用此方法,除非您的目标非常简单但不完全兼容。RegexLib.com()有数百个电子邮件验证例程。我建议您阅读这篇文章:如果您决定继续使用regex进行验证,我最喜欢的测试工具是免费的regex设计器,在这里免费提供:。。。在一个大列表中测试所有电子邮件(可免费下载或购买…或使用您自己的当前数据库),以确保您的正则表达式在您的限制范围内是可接受的
我会推荐一个基本的测试(很多都在regexlib.com的顶端…我不会因为他们的工作而获得荣誉,我经常使用),然后是一个需要用户交互的电子邮件验证程序。这是唯一真正“验证”电子邮件地址的方法。电子邮件很难测试,但您可以进行一些限制性但简单的电子邮件验证。我自己也用过这个,它能很好地确保95%是电子邮件地址
var simpleValidEmail = function( email ) {
return email.length < 256 && /^[^@]+@[^@]{2,}\.[^@]{2,}$/.test(email);
};
var simpleValidEmail=函数(电子邮件){
返回email.length<256&&/^[^@]+@[^@]{2,}\.[^@]{2,}$/.test(email);
};
我建议将其用于“简单”验证
要了解为什么这是一件很难解决的事情,请参阅:
更新:更正的正则表达式如果只想检查业务电子邮件,请尝试以下操作:
<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>
$(文档).ready(函数(e){
$('#sendReq')。单击(函数(){
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)(!ymail.com)([\w-]\++[\w-]){2,4}/;
如果(注册测试(电子邮件)){
返回0;
}
否则{
警报(“请输入业务电子邮件地址”);
返回false;
}
});
});
根据前面的回复,此答案添加+号并扩展到tld,字符数超过4个
function validateEmail(email) {
const regex = /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,15}$/;
return regex.test(email);
}
一个可能有助于使用正则表达式的工具是。你更喜欢使用正则表达式或简单javascript的解决方案?简单javascript。。正则表达式可能更好,但我不喜欢它的非直观格式。我不喜欢使用我看不懂的代码,也不喜欢使用ie复制和粘贴正则表达式的东西。仅仅是因为如果我收到一封电子邮件不起作用的投诉,我不能简单地看一看,就知道为什么脚本不起作用。大约两年前,我写了这样一句话:很好,你比我早11秒发了帖子。尽管这个RegExp有点正确,但不需要使用捕获参数,您应该使用
测试而不是搜索,并且锚定RegExp始终是一个好的做法。开始时的^
和结束时的$
都是“锚定”。它们规定字符串必须精确地以^后面的内容开始,以$前面的内容结束。查看此信息的一个简单方法是,/A/
将与“A”匹配,但/^A/
将不匹配。是否可以将其更改为只允许一个@
登录电子邮件id?我的意思是,这显然是错误的。它要么是固定的,要么至少不被接受为答案。这不是多余的吗(.+){2,}
它的意思是“任何字符一次或多次,至少两次或多次”。。。它不应该是{2,}
这不会返回真/假匹配,因为它会返回所有可能匹配有效电子邮件模式的模式。它应该返回email.test(…);即便如此,它在包含特殊字符的有效模式上返回false,除非您通过escape()之类的东西明确地将它们排除在验证之外(例如')[这也会杀死它]——正如在前面的评论中所述,所有的“maybe”字符使有效的正则表达式几乎不可能。最好用一个简单的例程进行测试,然后进行电子邮件验证:(这完全基于RFC验证)您的限制太多了。例如,您不允许gmail在名称部分使用+符号标记邮件。在域部件上进行测试之前,必须将其转换为punycode,否则您不支持IDN。这正是我想要的。我会在后端做更多的验证,但允许JS至少剔除更明显的假货是很方便的。这比accep好