【问题标题】:Using a function to validate email-addresses使用函数验证电子邮件地址
【发布时间】:2017-11-09 14:42:35
【问题描述】:

我是 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";
}

但这并没有做任何事情。有什么办法解决这个问题?

【问题讨论】:

  • 抱歉,这样的问题很难回答。缺少很多细节,我们不知道您的真实设置。我建议你试着找出自己是怎么回事。这并不难,它将帮助您了解 php 脚本在 Web 环境中是如何工作的。试试这个:当你点击提交按钮时,会发生什么?一步又一步。尝试通过将调试输出添加到日志文件中来显示每个步骤。
  • 您是关于验证电子邮件地址的问题还是关于 PHP 的打印变量的问题?
  • 不,更多如何显示电子邮件格式是否正确
  • 正则表达式末尾的 % 看起来很可疑,反正我宁愿看到 $ 那里

标签: php


【解决方案1】:

我们不能 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

【讨论】:

  • 这是一个更好的例子。我编辑了 if 语句。是 if (validate($email)),但应该是 if (validateEmail($email)) ;) 谢谢。
  • @b.s - 真真假假。我的错误...感谢您的反馈!如果存在本机方法(如本例所示),我总是更喜欢它。
【解决方案2】:

你确定你的正则表达式是正确的吗?我对其进行了修改,并且能够使代码正常工作。

<?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";
    }
}
?>

【讨论】:

  • 谢谢,可以了。奇怪,因为我使用的正则表达式直接来自我使用的示例。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    ...

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

    ...

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

    【讨论】:

    • @B.S.嘿嘿,想帮忙,没有太多线索,反正如果你不希望它出现在&lt;!DOCTYPE html&gt;&lt;html&gt;之前,这是正确的写法。感谢您的投票!现在自己解决。
    • 反对票是我的。再次查看您的代码。您正在执行is_email 函数两次并期待不同的结果...如果电子邮件有效,该函数将返回true 两次...请在发布之前花时间测试您的代码。如果您没有时间测试它 - 请说明它是未经测试的代码。这段代码完全是错误的......
    • @Lix 好的,对不起,你是对的,只是复制粘贴太快了
    猜你喜欢
    • 2014-06-12
    • 1970-01-01
    • 2021-10-20
    • 2018-12-12
    • 1970-01-01
    • 2018-03-13
    • 2011-09-02
    • 2013-02-20
    • 2014-03-12
    相关资源
    最近更新 更多