为什么这不会在@之后用连字符接受电子邮件地址?

时间:2011-08-24 19:05:07

标签: php javascript mysql

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

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

test-test@test.com有效,但test@test-test.com没有。有任何想法吗?

来自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."')";

是/否?

2 个答案:

答案 0 :(得分:1)

试试这个:

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

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

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

修改

更新了正则表达式,因此域部分不再局限于罗马字母TLD。允许使用其他字母表,但可能不太常见(但)。请参阅维基百科examples

答案 1 :(得分:0)

试试这个。

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

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

另外,你只是要求SQL注入:P