Ви можете скористатися filter_var()
функцією, яка дає багато зручних варіантів перевірки та санітарії.
filter_var($email, FILTER_VALIDATE_EMAIL)
Якщо ви не хочете змінювати код, який покладався на вашу функцію, просто зробіть:
function isValidEmail($email){
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
Примітка . Для інших застосувань (де вам потрібен Regex) ereg
сімейство застарілих функцій (POSIX Regex Functions) слід замінити preg
сімейством ( PCRE Regex Functions ). Існує невелика кількість відмінностей, прочитати Посібник має бути достатньо.
Оновлення 1 : Як вказав @binaryLV :
У PHP 5.3.3 та 5.2.14 була помилка, пов’язана з FILTER_VALIDATE_EMAIL, що призвело до сегментації під час перевірки великих значень. Простий і безпечний спосіб вирішення цього питання використовується strlen()
раніше filter_var()
. Я не впевнений щодо 5.3.4 остаточного, але написано, що також було зачеплено деякі версії 5.3.4-знімків.
Цю помилку вже виправлено.
Оновлення 2 : Цей метод, звичайно, буде підтверджений bazmega@kapa
як дійсна адреса електронної пошти, оскільки насправді це дійсна адреса електронної пошти. Але велика частина часу в Інтернеті, ви також хочете, щоб адреса електронної пошти , щоб мати TLD: bazmega@kapa.com
. Як запропоновано в цій публікації в блозі (посилання, яку опублікував @Istiaque Ahmed ), ви можете доповнити регексом , filter_var()
який перевірить наявність крапки в доменній частині (не перевіряє чи дійсний TLD):
function isValidEmail($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL)
&& preg_match('/@.+\./', $email);
}
Як @Eliseo Ocampos зазначив, ця проблема існує тільки до PHP 5.3, в цій версії вони змінили регулярний вираз , і тепер він робить цю перевірку, так що вам не доведеться.
eregi
є функцією) застаріле. Замість цього використовуйте PCRE .