2012-11-19 25 views
4

我使用php的preg_match函數驗證電子郵件地址。不過,我不斷收到以下錯誤php preg_match與電子郵件驗證問題

preg_match(): No ending delimiter '^' found 

這裏是我的preg_match

$pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; 

模式又是如何解決這一問題?

+0

相關:[使用正則表達式來驗證電子郵件地址](http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address?rq=1) – Dezza

回答

6

只需使用:

$pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i"; 
+0

這不完全有效,因爲你可以發送郵件到[email protected],你的模式會說這個地址是無效的。剛發生在我身上的是MS Exchange,它創建了這樣的電子郵件地址。 – mkudlacek

+0

@mkudlacek您希望在應用模式之前將電子郵件小寫。 – Shoe

+0

這不是對原始問題的回答。問題是如何使用preg_match()進行驗證。正確的模式是:/^[_ a-zA-Z0-9 - ] +(\。[_ a-zA-Z0-9 - ] +)* @ [a-zA-Z0-9 - ] +(\。 [a-zA-Z0-9 - ] +)*(\。[a-zA-Z] {2,})$ /或者用/ i擴展以用於不區分大小寫的匹配。 – mkudlacek

7

也許使用

filter_var($email, FILTER_VALIDATE_EMAIL); 

將是一個更簡單的方法。

+0

這已棄用。不再有效。 – JCastell

-2
var emailid = $.trim($('#emailid').val()); 
    if(! /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(emailid)){ 
       alert("<?php echo "email_invalid" ?>"); 

       return false; 
      } 

EMAILID是輸入標籤

+0

這是jQuery代碼。我需要它在PHP中。 – 2619

0

使用PHP函數filter_var()如果郵政局長要允許電子郵件地址的RFC風格的比賽只會是更容易的ID。對於某些應用程序或MTA(sendmail等),這可能不合意。但是,如果要使用preg_match()路由,我會建議調查非貪婪量詞並捕獲不使用緩衝區的語句。一個好的開始將是http://us3.php.net/manual/en/book.pcre.php

3

使用此代碼

<?php 
$email = "asd/[email protected]"; 
$regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'; 
$email = (preg_match($regex, $email))?$email:"invalid email"; 
?> 
+0

很好地使用變量和三元運算符 – DragonFire

0

因爲造成FILTER_VALIDATE_EMAIL的問題(比如,它不能很好地與不拉丁字符工作),我更喜歡使用:

preg_match("/^[^@][email protected][^@]+\.[a-z]{2,6}$/i",$email_address);

0

這是一個簡單的電子郵件驗證方法與正則表達式:

public function emailValidation($email) 
{ 
    $regex = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,10})$/"; 
    $email = strtolower($email); 

    return preg_match ($regex, $email); 
}