이메일 주소를 확인하는이 기능이 있습니다.
function validateEMAIL($EMAIL) {
$v = "/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/";
return (bool)preg_match($v, $EMAIL);
}
이메일 주소가 유효한지 확인해도됩니까?
답변
이메일 주소가 올바른지 여부를 확인하는 가장 쉽고 안전한 방법은 다음 filter_var()
기능 을 사용하는 것입니다.
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// invalid emailaddress
}
또한 도메인이 MX
레코드를 정의하는지 여부를 확인할 수 있습니다 .
if (!checkdnsrr($domain, 'MX')) {
// domain is not valid
}
그러나 이것은 여전히 메일의 존재를 보장하지 않습니다. 이를 확인하는 유일한 방법은 확인 메일을 보내는 것입니다.
이제 빠른 답변을 얻었으므로 빠른 답변을 배우고 사용하고 계속 진행하려는 경우 이메일 주소 확인에 대해 자유롭게 읽으십시오. 유감 없음.
정규식을 사용하여 이메일 주소를 확인하는 것은 “불가능한”작업입니다. 나는 당신이 만든 정규식이 쓸모 없다고 말하기까지합니다. emailaddresses 및 잘못된 emailaddresses를 잡기 위해 정규식을 작성하는 3 가지 rfc가 있으며 동시에 잘못된 긍정이 없으면 필사자가 할 수없는 일입니다. PHP 함수에서 사용하는 정규식 테스트 (실패 및 성공)를 보려면이 목록 을 확인하십시오 filter_var()
.
내장 PHP 기능, 이메일 클라이언트 또는 서버조차도 제대로 작동하지 않습니다. 여전히 대부분의 경우 filter_var
최선의 선택입니다.
이메일 주소의 유효성을 검사하기 위해 PHP가 현재 사용하는 정규식 패턴을 알고 싶다면 PHP 소스를 참조하십시오 .
이메일 주소에 대해 더 자세히 알고 싶다면 사양을 읽기 시작하는 것이 좋습니다. 그러나 모든 것이 쉽게 읽을 수는 없다고 경고해야합니다.
참고 filter_var()
로 이미 PHP 5.2으로 만 사용할 수 적혀있다. 이전 버전의 PHP에서 작동하려면 PHP에서 사용되는 정규식을 사용할 수 있습니다.
<?php
$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';
$emailaddress = 'test@gmail.com';
if (preg_match($pattern, $emailaddress) === 1) {
// emailaddress is valid
}
PS 위에서 사용한 정규식 패턴에 대한 참고 사항 (PHP 소스에서). Michael Rushton 의 저작권이있는 것 같습니다 . 명시된 바와 같이 : “이 코드를 자유롭게 사용하고 재배포하십시오. 그러나이 저작권 고지 사항을 유지하십시오.”
답변
이를 위해 filter_var 를 사용할 수 있습니다 .
<?php
function validateEmail($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
}
?>
답변
내 경험에 따르면 regex
솔루션에는 오 탐지가 너무 많고 filter_var()
솔루션에는 오 탐지가 있습니다 (특히 모든 최신 TLD에서 ).
대신, 주소에 이메일 주소의 모든 필수 부분 (사용자, “@”기호 및 도메인)이 있는지 확인한 다음 도메인 자체가 존재하는지 확인하는 것이 좋습니다.
전자 메일 사용자가 외부 도메인에 있는지 확인하는 방법 (서버 측)은 없습니다.
이것은 유틸리티 클래스에서 만든 방법입니다.
public static function validateEmail($email)
{
// SET INITIAL RETURN VARIABLES
$emailIsValid = FALSE;
// MAKE SURE AN EMPTY STRING WASN'T PASSED
if (!empty($email))
{
// GET EMAIL PARTS
$domain = ltrim(stristr($email, '@'), '@') . '.';
$user = stristr($email, '@', TRUE);
// VALIDATE EMAIL ADDRESS
if
(
!empty($user) &&
!empty($domain) &&
checkdnsrr($domain)
)
{$emailIsValid = TRUE;}
}
// RETURN RESULT
return $emailIsValid;
}
답변
PHP의 내장 필터를 사용하는 것이 좋습니다. .이 특별한 경우 :
FILTER_VALIDATE_EMAIL
param 과 함께 제공되면 true 또는 false를 반환 할 수 있습니다 .
답변
이렇게하면 전자 메일의 유효성이 검사 될뿐만 아니라 예기치 않은 문자에 대해 전자 메일이 삭제됩니다.
$email = $_POST['email'];
$emailB = filter_var($email, FILTER_SANITIZE_EMAIL);
if (filter_var($emailB, FILTER_VALIDATE_EMAIL) === false ||
$emailB != $email
) {
echo "This email adress isn't valid!";
exit(0);
}
답변
이메일 확인에 대한 ‘상단 질문’에서 이에 답변했습니다 https://stackoverflow.com/a/41129750/1848217
나에게 이메일을 확인하는 올바른 방법은 다음과 같습니다.
- @ 기호가 있는지 확인하고 그 앞뒤에 @ 이외의 기호가 있는지 확인하십시오.
/^[^@]+@[^@]+$/
- “활성화 코드”와 함께이 주소로 이메일을 보내십시오.
- 사용자가 자신의 이메일 주소를 “활성화”하면 모든 것이 올바른 것입니다.
물론 사용자가 “이상한”이메일을 입력 할 때 프런트 엔드에 경고 나 툴팁을 표시하여 도메인 부분에 점이나 인용 부호없이 공백이없는 것과 같은 일반적인 실수를 피할 수 있습니다. 그러나 사용자가 정말로 원한다면 “hello @ world”주소를 수락해야합니다.
또한 전자 메일 주소 표준은 진화 했으므로 진화 할 수 있으므로 “표준 유효”정규 표현식을 한 번만 입력 할 수는 없습니다. 또한 일부 구체적인 인터넷 서버는 공통 표준에 대한 일부 세부 사항에 실패하고 실제로는 “수정 된 표준”으로 작동 할 수 있음을 기억해야합니다.
따라서 @를 확인하고 프런트 엔드에서 사용자에게 힌트를주고 주어진 주소로 확인 이메일을 보냅니다.
답변
당신이 있는지 확인하려면 이메일 주소에서 제공하는 도메인이 유효 사용 뭔가 같은 :
/*
* Check for valid MX record for given email domain
*/
if(!function_exists('check_email_domain')){
function check_email_domain($email) {
//Get host name from email and check if it is valid
$email_host = explode("@", $email);
//Add a dot to the end of the host name to make a fully qualified domain name and get last array element because an escaped @ is allowed in the local part (RFC 5322)
$host = end($email_host) . ".";
//Convert to ascii (http://us.php.net/manual/en/function.idn-to-ascii.php)
return checkdnsrr(idn_to_ascii($host), "MX"); //(bool)
}
}
유효한 이메일 형식 이 유효한 이메일을 의미하지 않기 때문에 표준 이메일 유효성 검사와 함께 많은 유효하지 않은 이메일 주소를 필터링하는 편리한 방법입니다. 입니다.
그 주 idn_to_ascii()
(또는 그의 여동생 기능 idn_to_utf8()
) 기능을 하지 않을 수 있습니다 당신의 PHP 설치에서 사용할 수있는, 그것은 확장을 필요로 PECL의 국제> = 1.0.2 및 PECL IDN> = 0.1.
또한 이메일의 도메인 부분 (예 :)으로 IPv4 또는 IPv6은 user@[IPv6:2001:db8::1]
검증 할 수 없으며 이름 만 지정됩니다. 호스트 할 수 있습니다.