【问题标题】:Validate/accept only emails from a specific domain name仅验证/接受来自特定域名的电子邮件
【发布时间】:2012-08-23 21:31:14
【问题描述】:

这是我的 jQuery 脚本的一部分。我需要让系统验证特定域的电子邮件。

like example@schooldomain.com

并且只允许来自@schooldomain.com 的电子邮件

代码:

email: function(value,element){return this.optional(element)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\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]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([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.test(value);}

【问题讨论】:

  • 究竟是什么不起作用?
  • @Daniil 您的编辑破坏了代码。请不要在以后编辑问题中的代码。
  • 在客户端验证电子邮件毫无意义,因为关闭了javascript,我可以输入任何我想要的内容。
  • @Dunhamzzz — 不,不是。通过在将错误提交到服务器之前发现错误,使用户的生活更轻松。这可以节省页面刷新的时间。还需要服务器端解决方案,但客户端数据检查并非毫无意义。

标签: javascript jquery email-validation


【解决方案1】:

首先,正如 cmets 中所指出的,使用正则表达式验证电子邮件,然后检查电子邮件是否来自正确的域。

function validateEmail(email) { 
    var re = /^(([^<>()[\]\\.,;:\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,}))$/;
    if(re.test(email)){
        //Email valid. Procees to test if it's from the right domain (Second argument is to check that the string ENDS with this domain, and that it doesn't just contain it)
        if(email.indexOf("@thedomain.com", email.length - "@thedomain.com".length) !== -1){
            //VALID
            console.log("VALID");
        }
    }
}

【讨论】:

  • 这段代码会说@thedomain.comTHIS_IS_CERTAINLY_NOT_AN_EMAIL_ADDRESS@@是有效的。
  • 已编辑,因此它首先验证电子邮件,然后检查它是否来自正确的域。
  • IIRC 电子邮件不可正则表达式,总会有一些与正则表达式不匹配但有效的假设地址。我认为最好的解决方案是检查 a) 地址中是否只有一个 @,b) 字符串是否匹配 "@thedomain.com$" 编辑:事实证明,它是可正则表达式的,但只有一个 BEAST 一个正则表达式:ex-parrot.com/~pdw/Mail-RFC822-Address.html
  • 嗯,我认为这是最好的方法(很简单)。
  • 修复了这个问题,检查它是否以它结尾。
【解决方案2】:

感谢这个帖子,我找到了另一种解决方案,在“at”/“@”之后只接受一个特定的域。 Get everything after the dash in a string in JavaScript 基本上将电子邮件分为两部分,@ 之前的文本和@ 之后的文本。如果 @ 之后的文本不等于指定的域,则验证将为 false。

 // Email validation   
let em = document.forms['Login']['email'].value; 
let atpos = em.indexOf("@");
let domain = em.split("@")[1]; // Saves user input after the @ (at)

if (em == null || em == "") {
    alert("Email can not be empty.");
    document.getElementById('e').focus();
    return false;
} 
                                            // First test checks for atleast one character before @
else if (atpos < 1 || domain != "gmail.com"){ // Second test checks if the user entered a gmail.com domain after @
    alert("Not a valid e-mail address. Please write your gmail address like this: username@gmail.com.");
    document.getElementById('e').focus();
    return false;
} 

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 2022-12-05
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2016-05-12
    相关资源
    最近更新 更多