[javascript] JavaScript에서 이메일 주소를 확인하는 방법
JavaScript에서 이메일 주소를 확인하는 정규식이 있습니까?
답변
정규식을 사용 하는 것이 가장 좋습니다. 여기 에서 많은 테스트를 볼 수 있습니다 ( 크롬 에서 가져온 )
function validateEmail(email) {
const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
}
유니 코드를 허용하는 정규 표현식의 예는 다음과 같습니다.
const re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
그러나 JavaScript 유효성 검사에만 의존해서는 안됩니다. JavaScript는 쉽게 비활성화 할 수 있습니다. 이것은 서버 측에서도 검증되어야합니다.
위의 예제는 다음과 같습니다.
function validateEmail(email) {
const re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
function validate() {
const $result = $("#result");
const email = $("#email").val();
$result.text("");
if (validateEmail(email)) {
$result.text(email + " is valid :)");
$result.css("color", "green");
} else {
$result.text(email + " is not valid :(");
$result.css("color", "red");
}
return false;
}
$("#validate").on("click", validate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<p>Enter an email address:</p>
<input id='email'>
<button type='submit' id='validate'>Validate!</button>
</form>
<h2 id='result'></h2>
답변
나는 다음 과 같은 형태로 간단한 검증을 원하는 사람들을 위해 Jaymon의 답변 을 약간 수정 했습니다 .
anystring@anystring.anystring
정규식 :
/\S+@\S+\.\S+/
JavaScript 함수 예 :
function validateEmail(email)
{
var re = /\S+@\S+\.\S+/;
return re.test(email);
}
console.log(validateEmail('anystring@anystring.anystring'));
답변
완전성을 위해 여기에 다른 RFC 2822 호환 정규식이 있습니다.
공식 표준은 RFC 2822 로 알려져 있습니다 . 유효한 이메일 주소를 준수해야하는 구문을 설명합니다. 당신은 할 수 있습니다 ( 하지만 당신은 안 – 읽어 이 정규 표현식으로 구현)
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
(…) 큰 따옴표와 대괄호를 사용하여 구문을 생략하면 RFC 2822를보다 실용적으로 구현할 수 있습니다. 현재 실제 사용중인 모든 이메일 주소의 99.99 %와 일치합니다.
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
추가로 변경할 수있는 것은 2 문자 국가 코드 최상위 도메인과 특정 일반 최상위 도메인 만 허용하는 것입니다. 이 정규식은과 같은 더미 이메일 주소를 필터링합니다
asdf@adsf.adsf
. 당신은 새로운 최상위 도메인이 추가로 업데이트해야합니다 .
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b
따라서 공식 표준을 준수하더라도 여전히 타협점이 있습니다. 온라인 라이브러리 나 토론 포럼에서 정규 표현식을 맹목적으로 복사하지 마십시오. 항상 자신의 데이터와 자신의 응용 프로그램에서 테스트하십시오.
강조 광산
답변
와우, 여기에는 많은 복잡성이 있습니다. 가장 명확한 구문 오류를 잡기 만하면 다음과 같이 할 수 있습니다.
^\S+@\S+$
일반적으로 사용자가 만드는 가장 명백한 오류를 포착하고 양식이 대부분 올바른지 확인합니다. 이것이 JavaScript 유효성 검사의 모든 것입니다.
답변
이메일을 확인하기 위해 정규식을 사용하기로 결정한 순간을 이해해야 할 것이 있습니다. 아마 좋은 생각이 아닙니다 . 일단 당신이 그 용어를 알게되면, 거기에 반쯤 갈 수있는 많은 구현 이 있습니다. 이 기사는 그것들을 훌륭하게 요약합니다.
간단히 말해서, 절대적으로, 사용자가 입력 한 것이 실제로 이메일이 실제로 이메일을 전송하고 어떤 일이 일어나는지 보는 것임을 확실하게 확신 할 수있는 유일한 방법입니다. 그 외에는 모두 추측 일뿐입니다.
답변
HTML5 자체에는 이메일 유효성 검사가 있습니다. 브라우저가 HTML5를 지원하는 경우 다음 코드를 사용할 수 있습니다.
<form><input type="email" placeholder="me@example.com" required>
<input type="submit">
</form>
jsFiddle 링크
로부터 HTML5 사양 :
유효한 전자 메일 주소가 일치하는 문자열입니다
email = 1*( atext / "." ) "@" label *( "." label ) label = let-dig [ [ ldh-str ] let-dig ] ; limited to a length of 63 characters by RFC 1034 section 3.5 atext = < as defined in RFC 5322 section 3.2.3 > let-dig = < as defined in RFC 1034 section 3.5 > ldh-str = < as defined in RFC 1034 section 3.5 >
이 요구 사항은 RFC 5322를 고의적으로 위반 하는 것으로, 동시에 너무 엄격하고 ( “@”문자 앞), 모호한 ( “@”문자 뒤), 너무 느슨한 (주석 허용) 전자 메일 주소의 구문을 정의합니다. , 공백 문자 및 대부분의 사용자에게 친숙하지 않은 방식으로 따옴표로 묶은 문자열)을 여기에서 실제로 사용할 수 있습니다.
다음 JavaScript 및 Perl 호환 정규식은 위 정의를 구현 한 것입니다.
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
답변
이것이 최선의 해결책이라는 것을 알았습니다.
/^[^\s@]+@[^\s@]+\.[^\s@]+$/
다음 형식을 허용합니다.
1. prettyandsimple@example.com 2. very.common@example.com 3. disposable.style.email.with+symbol@example.com 4. other.email-with-dash@example.com 9. #!$%&'*+-/=?^_`{}|~@example.org 6. "() [] :,; @ \\\"! # $ % & '* +-/ =? ^ _`{} | ~ .a "@ example.org 7. ""@ example.org (따옴표 사이의 공백) 8. üñîçøðé@example.com (로컬 부분의 유니 코드 문자) 9. üñîçøðé@üñîçøðé.com (도메인 부분의 유니 코드 문자) 10. Pelé@example.com (라틴) 11. δοκιμή@παράδειγμα.δοκιμή (그리스어) 12. 我 買 @ 屋企. 香港 (중국어) 13. 甲 斐 @ 黒 川. 日本 (일본어) 14. чебурашка@ящик-с-апельсинами.рф (키릴 자모)
그것은 분명히 다재다능하고 가장 중요한 국제 캐릭터를 허용하면서도 기본적인 everything@anything.anything 형식을 시행합니다. RFC에서 기술적으로 허용되는 공간을 차단하지만 너무 드물기 때문에이 작업을 수행 할 수 있습니다.