[英]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.