PHP로 전자 메일의 유효성을 검사하는 방법은 무엇입니까?
PHPPHP로 전자 메일의 유효성을 검사하는 방법은 무엇입니까?
입력 값의 유효성을 검사하는 방법은 php5를 사용하는 유효한 이메일 주소입니다. 이제이 코드를 사용하고 있습니다.
function isValidEmail($email){
$pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
if (eregi($pattern, $email)){
return true;
}
else {
return false;
}
}
하지만 더 이상 사용되지 않는 오류가 표시됩니다. 이 문제를 어떻게 해결할 수 있습니까? 도와주세요.
해결법
-
==============================
1.filter_var () 함수를 사용하면 여러 가지 유용한 유효성 검사 옵션과 위생 옵션을 얻을 수 있습니다.
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가 지적한대로 :
이 버그는 이미 수정되었습니다.
업데이트 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 이전 버전에만 존재합니다. 그 버전에서는 정규식을 변경 했으므로 이제는이 검사를 수행하므로 필요 없습니다.
-
==============================
2.http://www.php.net/manual/en/function.ereg.php의 메모를 참조하십시오.
http://www.php.net/manual/en/function.ereg.php의 메모를 참조하십시오.
-
==============================
3.이것은 오래된 게시물이지만 이전에 한 가지 문제에 대해 아무도 언급하지 않았기 때문에 제 솔루션을 공유 할 것입니다.
이것은 오래된 게시물이지만 이전에 한 가지 문제에 대해 아무도 언급하지 않았기 때문에 제 솔루션을 공유 할 것입니다.
새 이메일 주소에는 UTF-8 문자 또는 .live, .news 등의 특수 도메인 이름이 포함될 수 있습니다.
또한 일부 전자 메일 주소는 키릴 문자를 사용할 수 있으며 표준 정규식이나 filter_var ()가 실패 할 수 있습니다.
그래서 그것을위한 해결책을 만들었습니다.
function valid_email($email) { if(is_array($email) || is_numeric($email) || is_bool($email) || is_float($email) || is_file($email) || is_dir($email) || is_int($email)) return false; else { $email=trim(strtolower($email)); if(filter_var($email, FILTER_VALIDATE_EMAIL)!==false) return $email; else { $pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD'; return (preg_match($pattern, $email) === 1) ? $email : false; } } }
이 기능은 모든 케이스 및 전자 메일 형식에 완벽하게 작동합니다.
-
==============================
4.나는 항상 이것을 사용한다.
나는 항상 이것을 사용한다.
function validEmail($email){ // First, we check that there's one @ symbol, and that the lengths are right if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) { // Email invalid because wrong number of characters in one section, or wrong number of @ symbols. return false; } // Split it into sections to make life easier $email_array = explode("@", $email); $local_array = explode(".", $email_array[0]); for ($i = 0; $i < sizeof($local_array); $i++) { if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) { return false; } } if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name $domain_array = explode(".", $email_array[1]); if (sizeof($domain_array) < 2) { return false; // Not enough parts to domain } for ($i = 0; $i < sizeof($domain_array); $i++) { if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) { return false; } } } return true; }
-
==============================
5.전자 메일의 유효성을 검사하는 regex 및 filter_var () 솔루션을 사용하지 마십시오. 이 답변보기 : https://stackoverflow.com/a/42037557/953833
전자 메일의 유효성을 검사하는 regex 및 filter_var () 솔루션을 사용하지 마십시오. 이 답변보기 : https://stackoverflow.com/a/42037557/953833
from https://stackoverflow.com/questions/5855811/how-to-validate-an-email-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP를 사용하여 MySQL 데이터베이스에서 이미지를 저장하고 검색하려면 어떻게해야합니까? (0) | 2018.09.07 |
---|---|
다른 프로그래밍 언어로 쉽게 변환 할 수 있도록 코드에서 어떤 유형의 패턴을 적용 할 수 있습니까? [닫은] (0) | 2018.09.07 |
$ _REQUEST []를 사용하는 것이 잘못된 이유는 무엇입니까? (0) | 2018.09.07 |
URL에서 서버로 파일 다운로드 (0) | 2018.09.07 |
PHP가 포함 된 GCM (Google 클라우드 메시징) (0) | 2018.09.06 |