[英]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:如果您想知道為什么您的正則表達式不起作用:
[]
不要寫||
。 只需使用[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.