为什么它不接受在@后面加连字符的电子邮件地址?

Why won't this accept email addresses with a hyphen after the @?

本文关键字:连字符 电子邮件地址 不接受 为什么      更新时间:2023-09-26

这是在我们的网站上注册接收电子邮件新闻更新的代码。它工作得很好,除非电子邮件地址在@后面有一个连字符,然后它会抛出一个错误框:

> The page at http://www.MySite.com says:
> 
> Please Fix the following: 
> 
> E-mail

test-test@test.com可以,但test@test-test.com不行。什么好主意吗?

from email.js:

    function checkSubmit(thisDept){
    var email = $('email').value;

    var message = "Please Fix the following: 'r'n";


    var emailpat = /^([a-zA-Z0-9])+(['.a-zA-Z0-9_-])*@([a-zA-Z0-9])+('.[a-zA-Z0-9_-]+)+$/;
    if( !email.match(emailpat) ) {
        message += "E-mail 'r'n";
    }


    if(message == "Please Fix the following: 'r'n"){
            submitEmail(email,thisDept);
    } else {
            alert(message);
    }

    }

function submitEmail(email,thisDept){
        new Ajax.Updater( "EAlertContainer","php/ealerts.php", {
     method: 'post', parameters: { email: email } });
}

编辑:感谢你对我发布的原始代码漏洞的所有关注。我可以肯定的是,正确的转义方式是:

mysql_select_db("DATABASE",$dbx); 
$email=mysql_real_escape_string ($email); 
$queryx = "INSERT into master_email (emailid,cellmail,email) VALUES ('','','".$email."')";

是/否?

试试这个:

var emailpat = /^[^@]+@[^@]+'.[^@'.]{2,}$/;

电子邮件地址应该只有一个@-符号,并且不能是第一个字符。在@之后,你需要至少一个点,后面跟着2个或更多的字母。

是的,这也接受无效的电子邮件地址。如果你想确保用户输入了一个有效的电子邮件地址,你应该发送一封电子邮件到该地址,并等待用户采取行动(即输入电子邮件中的代码)。

编辑

更新了正则表达式,所以域名部分不再局限于罗马字母tld。其他字母也是允许的,尽管可能还不太常见。

试试这个

$queryr = sprintf("SELECT emailid FROM master_email WHERE email LIKE '%s' LIMIT 1",
          mysql_real_escape_string($email));

,并对插入查询执行同样的操作。

也,你只是要求SQL注入:p