簡體   English   中英

PHP-preg_match()和eregi()無法正常工作?

[英]PHP - preg_match() and eregi() not working?

我在嘗試使用preg_match(或eregi(),如果更合適)驗證電子郵件地址時遇到了一些問題。 我已經嘗試了幾種正則表達式模式,無論我做什么,似乎都行不通。

功能如下:

function validateEmail($email) {

    if(eregi('[a-z||0-9]@[a-z||0-9].[a-z]', $email)){
        return true;
    }

}

任何想法有什么問題嗎? 我試過在eregi(和我以前使用過的preg_match)之前放置一個感嘆號,並且將其全部顛倒了(如預期的那樣),但仍然沒有使其正常工作。 我希望它不通過正則表達式返回TRUE。

而且當在preg_match函數上時,我沒有使用相同的正則表達式,於是我發現了另一個正則表達式,因為我知道您不能真正將兩者混為一談。 對?

提前致謝!

您應該通過filter_var使用過濾器擴展:

filter_var($email, FILTER_VALIDATE_EMAIL);

如果您想使用正則表達式,請不要使用嚴格的規則,否則我的+@example.org域將被拒絕。 使用類似~[^@]+@(?:[^.]+\\.)+[A-Za-z]{2,6}~ 盡管這仍然不允許有效的電子郵件,例如" "\\@"@example.org

PS:如果您想知道為什么您的正則表達式不起作用:

  • eregi已過時,請改用preg_match
  • 里面[]不要寫|| 只需使用[a-z0-9] || 只會另外允許| 字符
  • 您到處都忘記了+量詞。 知道每個部分可能只有一個字符。

修復所有問題后(但請不要使用此正則表達式!):

preg_match('~[a-z0-9]+@[a-z0-9]+.[a-z]+~i', $email);

只是為了澄清一些東西, ereg已貶值。

要將其轉換為preg_match ,它將是:

if(preg_match('/[a-z||0-9]@[a-z||0-9].[a-z]/', $email)){

大多數(我寬松地使用了這個術語) ereg只需要添加定界符(第一個和最后一個/)即可將其轉換為preg_match

暫無
暫無

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

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