2013-12-10 36 views
0

我一直在thirking一些電子郵件使用javascript一方面的電子郵件和filter_var
必要的參數和正則表達式使用preg_match .now作爲輸入sanitisation已進入長時間運行需要記住許多事情,在驗證電子郵件時使用。JavaScript與正則表達式和filter_var之間的區別電子郵件驗證

爲的preg_match if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))

由JavaScript

function validateForm() 
{ 
var x=document.forms["myForm"]["email"].value; 
var atpos=x.indexOf("@"); 
var dotpos=x.lastIndexOf("."); 
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
{ 
alert("Not a valid e-mail address"); 
return false; 
} 
} 

通過filter_var

<?php 
if(!filter_var("[email protected]", FILTER_VALIDATE_EMAIL)) 
{ 
echo("E-mail is not valid"); 
} 
else 
{ 
echo("E-mail is valid"); 
} 
?> 
+0

所不同的是:在實踐中 - 沒有,在實施 - 很多。兩者都會驗證您的輸入,但我建議在這兩種情況下使用相同的正則表達式。 –

+0

沒有執行?任何其他方式來處理更多的增強。 thnx in adv。 – black

+0

我同意埃裏克,你應該在這兩個地方使用正則表達式。 – Piotr

回答

0

是,這三個變量有很大的不同。

  • preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email) 
    

    這正則表達式是非常嚴格的 - 實際上,這是過於嚴格。它只允許在@ -sign和dot周圍使用單詞字符和縮寫。例如,它甚至不允許子域名(這很常見)。

  • var atpos = email.indexOf("@"); 
    var dotpos = email.lastIndexOf("."); 
    return !(atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
    

    這看起來相當不錯。它以正確的順序檢查@.的存在情況,這足以識別類似電子郵件的外觀字符串。它可以替換爲正則表達式/[email protected]+\..+/.test(email)(不允許換行符,但這很好)。

  • filter_var($email, FILTER_VALIDATE_EMAIL) 
    

    This可能做到這一點在PHP,但請注意這是最好的方式有someflaws爲好。

我也建議文章Stop Validating Email Addresses With Complicated Regular Expressions :-)

相關問題