Php 检查电子邮件格式HTML输入的有效性

Php 检查电子邮件格式HTML输入的有效性,php,validation,email,Php,Validation,Email,我有一个输入字段来输入电子邮件地址,如下所示: <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-m

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

 <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”的格式和需要

您需要使用电子邮件正则表达式和PHP函数preg\u match。

我建议使用此函数

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框架,是我见过的最好的电子邮件验证功能


??:O但在我的浏览器中,它是打印的,因为电子邮件是有效的!当你有一个非常棒的解决方案时,你还想要什么呢?但是在我的谷歌浏览器中,它是有效的!!我认为这是一个bug,你使用的是什么php版本?这不是一个解决方案,而是一个替代方案。但它显然比filter_var好一点: