在电子邮件地址上要求域名jQuery验证

5

我正在使用以下代码(与jQuery验证插件一起)来验证电子邮件地址:

    $(".schedule-tour-form").validate({
        rules: {    
            Email: {
                required: true,
                email: true
            }       
        },
    });

    <input id="email" name="Email" class="email" type="email" placeholder="name@email.com" />

问题在于它仍然允许没有域名后缀的电子邮件。例如,它验证“test@test”。如何要求域名后缀?

请问能否查看表单元素的HTML代码呢? - Alex
1个回答

3

即使将test@test视为有效的邮件地址,插件的官方页面也可能是有意的。您可以根据此处的建议创建一个新的规则,并使用严格的正则表达式模式。

//custom validation rule
$.validator.addMethod("customemail", 
    function(value, element) {
        return /^([a-zA-Z0-9_.-+])+\@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/.test(value);
    }, 
    "Sorry, I've enabled very strict email validation"
);

然后添加到您的规则中:
rules: {
                    email: {
                        required:  {
                                depends:function(){
                                    $(this).val($.trim($(this).val()));
                                    return true;
                                }   
                            },
                        customemail: true
                    },

1
答案中的正则表达式对我不起作用。原来连字符在正则表达式语法中有特殊含义,因此需要转义。更新后的正则表达式:/^([a-zA-Z0-9_.-+])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/.test(value); - Dharmang
以上的正则表达式无法工作,请使用这个:/^(([^<>()[]\.,;:\s@"]+(.[^<>()[]\.,;:\s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/。 - Janos Szabo
这段与 OP 相同的代码存在一个问题:它允许没有域名后缀的电子邮件,例如 myemail@something - Inigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接