0

我是 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>

现在,如果电子邮件正确,我想显示一条消息,如果它不正确,我想显示一条消息。我真的不知道下一步该做什么。在 ?> 结束标记之前,我已经尝试过以下操作:

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

但这无济于事。解决方案是什么?

4

4 回答 4

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.

于 2012-12-04T18:27:29.133 回答
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";
    }
}
?>
于 2012-12-04T18:25:25.430 回答
0

...

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

...

<body><?php echo($valid); ?>
于 2012-12-04T18:20:05.580 回答
0

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

此外,您可以说“假设此功能运行良好是语言的角色,而不是我的”。

<?php
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
于 2012-12-04T18:28:18.053 回答