使用函数验证电子邮件地址

时间:2012-12-04 18:13:43

标签: php

我是PHP新手中的自定义函数。我正在使用书中的以下功能来验证电子邮件地址:

<?php

$email = $_POST['email'];

function is_email($email) {
// Checks for proper email format
    if (!preg_match('/^[A-Za-z0-9!#$%&\'*+-/=?ˆ_`{|}~]+@[A-Za-z0-9]+(\.[A-Za-z0-9]+)+[A-Za-z]%/', $email)) 
    {
        return false;
    } 
    else 
    {
       return true;
    }
}

?>

<!DOCTYPE html>
<html>
<head>
<title>Validate Email</title>
</head>
<body>

    <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
    Email<input type="text" name="email"></input>
    <input type="submit" value="Send">
    </form>

</body>
</html>

现在,我想在电子邮件正确时显示一条消息,如果不正确则显示消息。我真的不知道下一步该怎么做。我已经尝试了以下,在?&gt;之前结束标签:

if (is_email($email) == true) {
    echo "Right";
}
elseif (is_email($email) == false) {
    echo "Wrong";
}

但这没有做任何事情。这是什么解决方案?

4 个答案:

答案 0 :(得分:2)

我们不会100%确定究竟是什么导致了您的问题,但允许我提供另一种方法来验证自定义函数中的电子邮件。你真的不需要重新发明轮子,因为已经有一种本地PHP方法来验证电子邮件。

function validateEmail($email){
  return filter_var($email, FILTER_VALIDATE_EMAIL);
}

$email = $_POST['email'];
if (validateEmail($email)){
  echo 'Valid email!';
}else{
  echo 'Email NOT valid!';
}

我在这里使用filter_var()方法FILTER_VALIDATE_EMAIL

答案 1 :(得分:1)

您确定您的正则表达式是否正确?我修改了它,我能够使代码工作。

<?php

function is_email($email) {
    // Checks for proper email format

    if (!preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/", $email)) {
        return false;
    } else {
        return true;
    }
}

if (isset($_POST['email'])) {
    $email = $_POST['email'];
    if (is_email($email) == true) {
        echo "Right";
    } elseif (is_email($email) == false) {
        echo "Wrong";
    }
}
?>

答案 2 :(得分:0)

...

if (is_email($email)) {
    $valid="Right";
} else {
    $valid="Wrong";
}
?>

...

<body><?php echo($valid); ?>

答案 3 :(得分:0)

我推荐filter_var,内置php。所以我认为将来会保留这个功能,而regexp功能可以改变。

此外,你可以说“这个语言的作用是假设这个功能很好,而不是我的。”

<?php
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));