【问题标题】:Checking the validity of email format HTML input检查电子邮件格式 HTML 输入的有效性
【发布时间】:2014-02-02 05:25:37
【问题描述】:

我有一个输入字段来输入电子邮件地址,如下所示:

 <input type="email" name="email" id="email" title="E-mail(Format: email@example.com)">

我想在用户提交电子邮件地址时检查它的有效性。所以我使用了这段代码:

 <?php
 $email =($_POST['email']);
 if(!filter_var($email, FILTER_VALIDATE_EMAIL))
 {
 echo "E-mail is not valid";
 }
else
{
 echo "E-mail is valid"; }? >

但尽管我输入电子邮件为“someone@example”,但这将打印“电子邮件有效”。如何验证“someone@example.com”格式的电子邮件?这意味着'@'和'.com'的格式和需求?

【问题讨论】:

  • Really ???
  • :O 但在我的浏览器中打印为电子邮件有效!
  • 当您拥有完全可用的出色解决方案时,您还想要什么?
  • 但在我的 GoogleChrome 浏览器中打印为有效!!
  • 我认为这是一个错误,你使用的是什么 php 版本?

标签: php validation email


【解决方案1】:

您将需要使用电子邮件正则表达式和 PHP 函数 preg_match http://au1.php.net/preg_match

【讨论】:

    【解决方案2】:

    我推荐使用这个功能

    public static function isEmail($value)
      {
        $atom = "[-a-z0-9!#$%&'*+/=?^_`{|}~]"; // RFC 5322 unquoted characters in local-part
        $localPart = "(?:\"(?:[ !\\x23-\\x5B\\x5D-\\x7E]*|\\\\[ -~])+\"|$atom+(?:\\.$atom+)*)"; // quoted or unquoted
        $alpha = "a-z\x80-\xFF"; // superset of IDN
        $domain = "[0-9$alpha](?:[-0-9$alpha]{0,61}[0-9$alpha])?"; // RFC 1034 one domain component
        $topDomain = "[$alpha](?:[-0-9$alpha]{0,17}[$alpha])?";
        return (bool) preg_match("(^$localPart@(?:$domain\\.)+$topDomain\\z)i", $value);
    }
    

    它来自 Nette 框架,是我见过的最好的电子邮件验证功能。

    https://github.com/nette/nette/blob/master/Nette/Utils/Validators.php

    【讨论】:

    • 这不是解决方案,而是替代方案。
    • 是的。但它显然比 filter_var 好一点:)
    猜你喜欢
    • 2013-05-24
    • 2016-07-23
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2017-01-14
    • 2015-03-17
    相关资源
    最近更新 更多