2009-11-12 53 views
41

我正在嘗試執行一個SQL查詢,但我需要檢查某個值是否爲電子郵件地址。 我需要一種方法來檢查$user是否爲電子郵件地址,因爲我的表中有這樣的用戶值。檢查一個字符串是否是PHP中的電子郵件地址

test 
test2 
[email protected] 
[email protected] 
test392 
[email protected] 

等等...

我需要這麼$useremail檢查$user找到,如果它是一個電子郵件地址。因此,我可以更新值,WHERE user=test OR [email protected]

$user = strtolower($olduser); 
$useremail = ""; 

mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$useremail"); 
+1

爲什麼它很重要,如果一個值是一個電子郵件地址?一個字符串可以是完全格式化的電子郵件地址,但仍然無效,如「StackOverflowIsAGreatWebsite @ whitehouse.gov」。因此,確定地址是否有效的唯一方法是嘗試向其發送郵件。如果你不打算向它發送郵件,你爲什麼在意? – 2009-11-12 23:23:35

+0

@Daniel Pryden我在我的數據庫中存儲了用戶名。我想將電子郵件值更新爲常規值,因此當我運行我的腳本時,它會從API中提取用戶名數據,然後我可以用新的用戶名值替換舊的電子郵件值。對於我正在編寫的腳本來說更方便。 – Homework 2009-11-13 00:06:27

回答

162

沒有正則表達式:

<?php 
    if(filter_var("[email protected]", FILTER_VALIDATE_EMAIL)) { 
     // valid address 
    } 
    else { 
     // invalid address 
    } 
?> 
+9

頂部提示! NB這是PHP v5.2.0或更高版本 – richsage 2009-11-12 22:49:40

+0

完美無瑕地工作。 – Homework 2009-11-12 22:59:08

+1

@richsage:對,從PHP 5.2.0(2006-11-02發佈)開始,'filter'擴展名已被默認啓用。對於早期的PHP版本,您可以從PECL下載並安裝過濾器擴展。 – 2009-11-12 22:59:30

6

您可以使用正則表達式來驗證看到你輸入的字符串,如果它相匹配的電子郵件地址:

<?php 
$email = "[email protected]"; 
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
    echo "Valid email address."; 
} 
else { 
    echo "Invalid email address."; 
} 
?> 

來源: http://www.totallyphp.co.uk/code/validate_an_email_address_using_regular_expressions.htm

編輯:更準確的表述,請參閱Travis answer在這個問題上

+2

'.info'和'.museum'分別如何? – BalusC 2009-11-12 22:46:24

+1

哦,另外,即將到來的ICANN決定允許在URL中使用中文和阿拉伯語? – BalusC 2009-11-12 22:47:33

+0

而eregi已棄用。 不是推薦的解決方案 – John 2017-11-18 16:26:18

2
$user_email = "[email protected]"; 

function isEmail($user) { 
    if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
      return true 
    } else { 
      return false 
    } 
} 

if (isEmail($user_email)) { 
    // email is valid, run the query 
    mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$user_email"); 
} 
3

我一直在使用這個功能了很多年跨越數百個網站。它可能並不完美,但我從來沒有假陰性(或陽性)的投訴:

function validate_email($email) { 
    return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\[email protected])|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true; 
} 
2
從中大多不支持的可用TLD的 所有所有的正則表達式的建議

除了(例如包括.info.museum)和即將到來的ICANN決定,允許中國和阿拉伯語中的URL(這將讓[a-z]\w失敗)於下列哪一種更通用的正則表達式是足夠

([^[email protected]]+)(\.[^[email protected]]+)*@([^[email protected]]+\.)+([^[email protected]]+) 

我還要提到的是做一個WHERE user=test OR [email protected]太容易出錯。在表格中更好地使用自動生成的PK,並在WHERE子句中使用它。

我真的沒有看到符合RFCxxxx規範的嚴格,長期和不可讀的mailregexes的價值。最好的辦法是發送帶有激活密鑰鏈接的郵件給最終用戶,讓它確認郵件地址。在表單中也通知這一點。如有必要,讓用戶像輸入密碼一樣鍵入電子郵件地址兩次。

2

因爲每個人都在發佈自己的正則表達式,這裏是我的: ^((([\w+-]+)(.[\w+-]+)*)|(\"[^(\|\")]{0,62}\"))@(([a-zA-Z0-9-]+.)+([a-zA-Z0-9]{2,})|[?([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}]?)$

據我所知,它支持在RFC規範的一切,包括了很多的東西,大多數人通常不包括。

4

此函數is_email()將給你一個明確的答案,以確定字符串是否是有效的電子郵件地址。據我所知,沒有其他解決方案能夠以相同的權限執行此操作。

如果我理解正確的例子,你可以使用它像這樣

$user = strtolower($olduser); 
$useremail = (is_email($user)) ? $user : ''; 

PHP的內置功能是不完整的。我是is_email()的主要作者,所以我在這裏吹了自己的小號,但我已經做了大量的工作,以便讓其他人不必再來一次。

0
if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
{ 
    echo 'This is a valid email address.'; 
    echo filter_var($email, FILTER_VALIDATE_EMAIL); 
    //exit("E-mail is not valid"); 
} 
else 
{ 
    echo 'Invalid email address.'; 
} 
2

這不是一個好方法,也不會檢查電子郵件是否存在,但會檢查它是否看起來像帶有@和域擴展名的電子郵件。

function checkEmail($email) { 
    if (strpos($email, '@') !== false) { 
     $split = explode('@', $email); 
     return (strpos($split['1'], '.') !== false ? true : false); 
    } 
    else { 
     return false; 
    } 
} 

$email = '[email protected]'; 
$check = checkEmail('[email protected]'); 
if ($check) { 
    echo $email . ' looks like a valid email.'; 
} 
+2

'email @ com'是一個有效的電子郵件地址:http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses – Toto 2013-12-16 19:29:36

0
$user_email = "[email protected]"; 

function isEmail($email) { 
    if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
      return true; 
    } else { 
      return false; 
    } 
} 

if (isEmail($user_email)) { 
    // email is ok! 
} else { 
    // email not ok 
} 
相關問題