JavaScript中的电子邮件地址检查

3

我认为许多人之前都做过类似的开发任务:

我想检查人们的电子邮件地址是否仅匹配@tomtom.com或@stream.com。

目前,我脑海中有两种解决方案:

  1. Using indexof() function

    var checkTomTomEmail=eo.data.username.indexOf("@tomtom.com");
    var checkStreamEmail=eo.data.username.indexOf("@stream.com");
    
    
    if (checkTomTomEmail >0 || checkStreamEmail >0 )
    {
        //Run the login code
    }
    
    
    Else 
    {
        //Please login with your tomtom or stream email 
    }
    
  2. Using match

    var patt1=/@tomtom.com/gi;
    var patt2=/@stream.com/gi;
    var checkTomTomEmail=eo.data.username.match(patt1);
    var checkStreamEmail=eo.data.username.match(patt2);
    
    
    if(indexOf(checkTomTomEmail)> 1 ||indexOf (checkStreamEmail)>1)
    {
        //Login 
    }
    

我仍然认为我没有考虑到所有的细节。有什么建议吗?
谢谢


这必须是JavaScript吗?有安全问题吗?如果有人想要绕过它,那很容易。 - m.edmondson
2个回答

3
也许如果只允许输入这两个地址的电子邮件,你应该只收集用户名,然后允许使用单选按钮选择 @tomtom.com 或 @stream.com。
如果您仍想使用JavaScript,则可以将正则表达式合并为单个语句。
var emailPatt=/@(tomtom|stream).com/gi;

if(emailPatt.test(eo.data.username))
{
    //Login 
}

这将在我们的供应商系统中需要太多的定制。谢谢,Evil Anday,你认为匹配解决方案怎么样? - QLiu

2
这个怎么样?……
var emailRegex = /^([0-9a-z])+@(tomtom|stream)\.com$/ig;
if (emailRegex.test(emailRegex)) {
    // Login
}

与其执行.match(...) - 你会得到一个字符串返回,我们可以执行.test(...)来查看是否有任何匹配。

此模式保证以下内容:

  1. 电子邮件地址的“用户名”部分必须至少有一个字符(例如,a@stream.com)
  2. 用户名必须由数字或字母组成(大小写不重要,因为末尾有/i)
  3. 输入必须包含完整的电子邮件地址,没有前导或尾随空格。例如,“user@tomtom.com”将失败,它只接受“user@tomtom.com”。)

您可以进一步自定义此设置,例如,确保用户名必须至少有3个字符,您可以在电子邮件地址中使用下划线或破折号等。

回答您的问题,两种解决方案都不起作用。原因如下:

  1. 用户可以输入“tom@tomtom.com Hello”,并且它将通过您的验证。
  2. 特别是在解决方案#2上,“.”是一个正则表达式保留字符,这意味着它将匹配任何内容,因此,如果用户输入“@tomtom1com”,它将通过...

更多关于正则表达式的信息:http://www.regular-expressions.info/reference.html


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