JavaScript에서 이메일 주소를 확인하는 가장 좋은 방법은 무엇입니까?
질문
정규 표현식으로 JavaScript에서 전자 메일 주소를 확인하는 가장 좋은 방법은 무엇입니까?
답변
정규 표현식을 사용하는 것이 가장 좋은 방법 일 것입니다.여기에 한 무리의 테스트를 볼 수 있습니다 (크롬에서 가져온)
const validateEmail = (email) => {
return String(email)
.toLowerCase()
.match(
/^(([^<>()[\]\\.,;:\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,}))$/
);
};
유니 코드를 허용하는 정규 표현식의 예는 다음과 같습니다.
const re =
/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
그러나 자바 스크립트 유효성 검사에만 의존해서는 안된다는 것을 명심하십시오.자바 스크립트는 쉽게 사용할 수 없습니다.이는 서버 측면에서도 검증되어야합니다.
다음은 위의 작업의 예입니다.
const validateEmail = (email) => {
return email.match(
/^(([^<>()[\]\\.,;:\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,}))$/
);
};
const 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;
}
$('#email').on('input', validate);
그리고 이것은 HTML입니다.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="email">Enter an email address: </label>
<input id="email" />
<h2 id="result"></h2>
답변
나는 정말로 간단한 검증을 원하는 사람들을 위해 Jaymon의 대답을 약간 수정했습니다.
anystring@anystring.anystring
정규식 :
/\S+@\S+\.\S+/
여러 @ 기호 일치를 방지하려면 다음을 수행하십시오.
/^[^\s@]+@[^\s@]+\.[^\s@]+$/
예제 JavaScript 함수 :
함수 ValidateEmail (이메일) { var re = /\s + +s + \.\s+/; Re.test (이메일)를 반환합니다. } console.log (ValidateEmail ( 'youtstring@AnyString.AnyString'));
답변
완전성을 위해서는 여기에서 다른 RFC 2822 준수 정규식
공식 표준은 RFC 2822라고합니다. 유효한 이메일 주소가 준수 해야하는 구문을 설명합니다. 이 정규식으로이를 구현할 수 있습니다 (읽지 않아야합니다). (? : [A-Z0-9! # $ % & '* + / = ^ _ {| |} ~ -] + (? : \. [A-Z0-9! # $ % &'* + / =? ^ _`{|} ~ -] +) * | "(? : [\ x01- \ x08 \ x0b \ x0c \ x08 \ 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 [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]? 추가 변경 사항은 두 글자 국가 코드 최상위 도메인이고 특정 일반 최상위 도메인 만 허용하는 것입니다. 이 정규식은 asdf@adsf.adsf와 같은 더미 전자 메일 주소를 필터링합니다. 새로운 최상위 도메인이 추가되면 업데이트해야합니다. [A-Z0-9! # $ % & '* + / = ^ _ {| |} ~ -] + (? : \. [A-Z0-9! # $ % &'* + / = ^ _ {|} ~ -] +) * @ (? : [A-Z0-9] (? : [A-Z0-9 -] * [A-Z0-9]? \.) + (? : [az] {2} | com | org | net | gov | mil | biz | 정보 | mobi | 이름 | Aero | 일자리 | 박물관) \ b 그래서 공식 기준을 따르는 경우에도 여전히 삭감이 발생할 수 있습니다. 온라인 라이브러리 또는 토론 포럼에서 정규 표현식을 맹목적으로 복사하지 마십시오. 항상 자신의 데이터와 자신의 응용 프로그램으로 테스트하십시오.
강조
답변
와우, 여기에 많은 복잡성이 있습니다.당신이하고 싶은 일이 가장 확실한 구문 오류를 잡는 것만이면 다음과 같이 할 것입니다.
^\S+@\S+$
그것은 대개 사용자 가이 양식이 주로 옳다는 것을 보장하는 가장 확실한 오류를 잡습니다. 이는 JavaScript 유효성 검사가 모두 있습니다.
편집하다: 우리는 또한 '.'를 확인할 수 있습니다.이메일 사용
/^\S+@\S+\.\S+$/
답변
정규 표현식을 사용하기로 결정하여 이메일을 확인하기로 결정 해야하는 것이 있습니다. 아마도 좋은 생각이 아닐 것입니다.그렇게하신 조건에 오면 거기에 당신을 중간하게 얻을 수있는 많은 구현이 많이 있으며,이 기사는 그들을 멋지게 합산합니다.
그러나 간단히 말해서, 절대적으로 사용되는 유일한 방법은 사용자가 실제로 이메일이 실제로 이메일을 보내고 무슨 일이 발생하는지 확인하는 것입니다.그 외에도 모두가 추측합니다.
답변
HTML5 자체에는 전자 메일 유효성 검사가 있습니다.브라우저가 HTML5를 지원하는 경우 다음 코드를 사용할 수 있습니다.
<form>
<input type="email" placeholder="me@example.com" required>
<input type="submit">
</form>
JSFiddle 링크
HTML5 사양에서 :
유효한 전자 메일 주소는 다음 ABNF의 전자 메일 프로덕션과 일치하는 문자열 인 문자 집합이 유니 코드입니다.
이메일 = 1 * (atext / ".") "@"label * ( "."레이블)
label = let-dig [[LDH-STR] let-dig]; RFC 1034 섹션 3.5의 길이 63 자로 제한
atext =
최근댓글