簡體   English   中英

為什么我的用於PHP的電子郵件正則表達式不起作用?

[英]Why doesn't my email regex for PHP work?

我在Javascript中具有相同的表達式,但是在PHP中無法用於服務器端驗證。 這是代碼

if (ereg('/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\\.([a-zA-Z])+([a-zA-Z])+/',$_POST['email-address']))
    echo "valid email";
else
    echo "invalid email";

PHP隨附的過濾器:

if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {

echo "E-mail is not valid";

} else {

echo "E-mail is valid";

}

使用preg_match,而不是ereg。 ereg regex字符串不使用斜杠字符。

另外,PHP中的單引號字符串中可能不需要雙反斜杠(盡管不確定)

我使用以下內容。 在比較之前,我還將在輸入字符串上運行TRIM():

function is_email($string) {
  if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$string)) {
    return true;
  } else {
    return false;
  }
}

我現在整理了Cal Henderson,Dave Child,Phil Haack,Doug Lovell和RFC 3696的測試用例。總共有158個測試地址。

我對所有可以找到的驗證器進行了所有這些測試。 比較如下: http : //www.dominicsayers.com/isemail

隨着人們增強其驗證器,我將嘗試使此頁面保持最新。 感謝Cal,Dave和Phil在匯編這些測試和對我自己的驗證程序的建設性批評方面所提供的幫助和合作。

人們應該特別注意針對RFC 3696勘誤表 實際上,其中三個規范示例是無效地址。 地址的最大長度為254或256個字符, 而不是 320。

可能是由於要使用符號連接表達式(+)。

無論如何,您應該嘗試以下一種方法:

\\ w +([[-+。'] \\ w +) @ \\ w +([-。] \\ w +) 。\\ w +([-。] \\ w +)*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM