【问题标题】:How can I validate an email address from a specific domain?如何验证来自特定域的电子邮件地址?
【发布时间】:2012-12-17 05:41:50
【问题描述】:

我有这个代码来验证电子邮件输入。我的问题是,我希望我的表单只接受一个特定的域。例如,例如 test@thisdomainonly.com。我不知道该怎么做。到目前为止,这是我所拥有的:

function validateEmail(email)
{
    var splitted = email.match("^(.+)@(.+)$");
    if (splitted == null) return false;
    if (splitted[1] != null)
    {
        var regexp_user = /^\"?[\w-_\.]*\"?$/;
        if (splitted[1].match(regexp_user) == null) return false;
    }
    if (splitted[2] != null)
    {
        var regexp_domain = /^[\w-\.]*\.[A-Za-z]{2,4}$/;
        if (splitted[2].match(regexp_domain) == null)
        {
            var regexp_ip = /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
            if (splitted[2].match(regexp_ip) == null) return false;
        } // if
        return true;
    }
    return false;
}

【问题讨论】:

  • 来个简单的 if( email.indexOf('@thisdomainonly') > 0)
  • 如果这是关于安全的,这是很危险的,因为可以很容易地使用@thisdomainonly.com.myrealdomain.com 创建一个子域

标签: javascript validation email


【解决方案1】:

修改你的函数,你会使用这样的东西:

function validateEmail(email)
{
    var splitted = email.match("^(.+)@thisdomainonly\.com$");
    if (splitted == null) return false;
    if (splitted[1] != null)
    {
        var regexp_user = /^\"?[\w-_\.]*\"?$/;
        if (splitted[1].match(regexp_user) == null) return false;
        return true;
    }
    return false;
}

但更有效的版本是:

function validateEmail(email){
    return /^\"?[\w-_\.]*\"?@thisdomainonly\.com$/.test(email);        
}

【讨论】:

  • test 是比 match 更合适的选择,但就速度而言,indexOf 可能是最好的选择。
  • 是的,但是 indexOf 只会检查所需域的存在,而 test 也会验证本地部分。
  • 这似乎对我不起作用。我还尝试在我的内联验证中附加正则表达式,但它不起作用。你知道为什么吗?
  • 如果我输入乱码电子邮件,例如 asdas@fgd.wqe,它仍然接受输入。与 indexOf 相同
  • 这看起来很奇怪。你能用你正在使用的新代码更新你的问题吗?
【解决方案2】:

简单的 indexOf 检查怎么样:

        function checkEmail(email, domainName){
            if(email.indexOf(domainName) > 0)
                if((email.indexOf(domainName) + domainName.length) == email.length){
                    //do regex checking if any
                    return true;
                }

            alert('Please enter a valid email for : '+ domainName)
            return false;
        }

【讨论】:

    猜你喜欢
    • 2013-12-20
    • 2012-07-27
    • 2012-08-23
    • 2011-06-14
    • 2013-03-10
    • 2015-05-16
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多