jQuery Validate - 没有顶级域名的电子邮件有效吗?

时间:2016-06-03 08:43:36

标签: jquery validation

我的表单中有以下输入:

<input class="input-group-field" id="email" name="email" type="email" size="1" required="">

我正在使用jQuery验证插件在ajax请求之前验证表单。 它工作正常,但为什么这个电子邮件输入有效:

  

ABC @ ESD

因此,如果我没有添加顶级域名,那么它似乎是一封有效的电子邮件吗?

而abc @ esd。无效

任何想法有什么不对或我能做些什么来防止这种情况?

代码:

 if ($("#valForm").valid()) {
   // Do Stuff
 }

我没有设置任何规则

由于

4 个答案:

答案 0 :(得分:2)

创建自定义方法:

$.validator.addMethod('emailtld', function(val, elem){
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

    if(!filter.test(val)) {
        return false;
    } else {
        return true;
    }
}, '*');

然后,您可以将数据属性“data-rule-emailtld”添加到输入字段:

<input class="input-group-field" id="email" name="email" type="email" size="1" required="" data-rule-emailtld="true">

注意:来自“Sharukh k shaji”的Answer使用正确的正则表达式,但未使用jQuery Validation插件。

答案 1 :(得分:1)

<input class="input-group-field" id="email" name="email" type="email" size="1" required="">

上述代码验证输入的是否是电子邮件。这意味着它只会在之前和之后查找“@”和一些值。

要验证电子邮件,您必须自己进行jquery验证。

var emailValidation = function ( email ) {
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

if ( !filter.test( email ) ) {
    return false;
} else {
    return true;
}}

以上代码是使用regx和jquery进行电子邮件验证的示例。

答案 2 :(得分:1)

显然,是的,快速查找维基百科会产生有趣的结果:Valid adresses as by wikipedia

那么,您是否应该允许RFC规范允许的所有内容?可能不是。首先,因为有些是非常具体的(仅限本地域,您的示例),而其他一些是明显模糊的,如"()<>[]:,;@\\\"!#$%&'*+-/=?^_{}| ~.a"@example.org(从维基百科中提取),其次通过本书验证(或在本例中,RFC)为您提供页面 - 正式的正则表达式没有人可以阅读或理解。

由于您可能正在使用开箱即用的功能,因此您可以自行决定如何处理它。如果你想调整它,那就选择一个符合99.8%所有地址的正则表达式,可能是100%的客户。如果没有,请接受电子邮件地址固有的怪异。

代码方面,其他答案可能会对“如何”问题提供更多帮助,因为我对该领域缺乏了解。

答案 3 :(得分:-1)

尝试使用此正则表达式/^([\w-.]+@(gmail|yahoo|hotmail)(\.+)?[a-zA-Z])\/?/并创建验证器方法

&#13;
&#13;
$(document).ready(function(){
  $.validator.methods.email = function( value, element ) {
     var email = /^([\w-.]+@(gmail|yahoo|hotmail)(\.+)?[a-zA-Z])\/?/;
    return email.test(value);
  }
  $('.validate').validate();

  
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdn.jsdelivr.net/jquery.validation/1.15.0/jquery.validate.min.js"></script>
<form class="validate">
		<input class="input-group-field" id="email" name="email" type="email" required="">
		<input class="input-group-field" id="submit" name="submit" type="submit"  >
	</form>
&#13;
&#13;
&#13;