여기에 RegEx가 있습니다. 100 % 나쁜 이메일 주소는 생략하지만 완전히 이해할 수 없으므로 커뮤니티 전문가에게 전화해야합니다. 다음과 같이누구나이 정규식을 나에게 자세히 설명 할 수 있습니까?
문자열은 다음과 같습니다
^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*(.[a-zA-Z]{2,3})$
사전에 감사합니다! 조각에 의해
는여기에 RegEx가 있습니다. 100 % 나쁜 이메일 주소는 생략하지만 완전히 이해할 수 없으므로 커뮤니티 전문가에게 전화해야합니다. 다음과 같이누구나이 정규식을 나에게 자세히 설명 할 수 있습니까?
문자열은 다음과 같습니다
^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*(.[a-zA-Z]{2,3})$
사전에 감사합니다! 조각에 의해
는^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*(.[a-zA-Z]{2,3})$
조각
^Start of the string
[_a-zA-Z0-9-]+ One or more characters of "_" (no quotes), a letter (a-z, A-Z), a number (0-9), or "-" (no quotes)
(.[_a-zA-Z0-9-]+)* zero or more substrings of type .something, or .123, or .a123. The substring must be formed by a . and a letter (same group of letters as before). So "." is not valid. ".a" or ".1" or ".-" is.
당신이하지 수있는
@ a "@" (like [email protected])
[a-zA-Z0-9-]+ One or more characters with the same pattern as before
(.[a-zA-Z0-9-]+)* Zero or more substrings of type ".something"... just as before
(.[a-zA-Z]{2,3}) A "." (dot) and 2 or 3 letters (a-z or A-Z)
$ The end of the string
그래서 우리는 이메일 주소가 (지금까지이 예를 my.name12
또는 my.name12.surname34
에 대해 받아 들일 것입니다) [email protected]
(@
앞에 "dangling"점 없음) 또는 [email protected]
(시작 점이 없음). 도메인은 문자로 시작해야하며 첫 번째 수준 도메인 (.com
/.uk
/??) 바로 앞에 점을 사용할 수 없으므로 [email protected]
이 아닙니다. 첫 번째 수준 도메인은 2 자 또는 3 자 (숫자 없음)이어야합니다.
\.
이어야하므로 오류가 있습니다. .
(도트)은 이스케이프해야합니다. 언어에 따라 \
는 문자열에 이스케이프해야합니다 (그래서 \\.
수)
내가 제대로 볼 경우, 다음이 당신의 정규식에 따라 유효 할 것이다 : [email protected]@[email protected]@aa
도트 임의의 표시이다 캐릭터!
Someone%[email protected]
간단한 대답 :
또한 다음 유효 이메일 주소는해야하지만, 허용되지 것입니다 그것은하지 않습니다.
잘못된 전자 메일 주소가 반드시 잘못 포맷 된 것 ([email protected]이 올바른 형식이지만 여전히 나쁘다는 뜻)을 의미하지는 않지만 RegEx는 잘못된 주소도 허용합니다.
예를 들어, 가장 오른쪽 부분 ((.[a-zA-Z]{2,3})$
)은 확인 된 문자열이 점으로 끝나야하고 2 ~ 3 자로 끝나야 함을 나타냅니다. 이 존재하지 않는 최상위 도메인 이름 (예를 들어, .aa)을 받아, 4 편지 TLD의를 차단합니다 (예를 들어, .INFO)
[_a-zA-Z0-9-]
경우에만 이러한 문자를 원하는 의미 - 귀하의 이메일 주소 (''영숫자 문자 또는 '_'또는)하지만이 모든 문자로 유효가 될 수 있습니다! # $ % & '* + -/=?^_`{| } ~
첫 번째 부분 (최대 @)은 최대 253 자 (최대 {1,253}) 여야하며 두 번째 부분 (최대 @)은 최대 64 자 ({4,64}) 여야합니다. 이 제외되지 않습니다 The Article On Wiki
번호 : 당신이 EmailAddress를 규범을 알고 싶다면 바로 위키피디아를 보면,
합니다 (({4,64}) 계수 한계를 넣기 전에 첫 번째 또는 두 번째 그룹에 괄호를 추가) 나쁜 이메일 주소의 100 %. 구문 적으로 유효한 주소의 대다수가 존재하지 않는 계정 (예 : [email protected]
)이기 때문에 모든 주소를 거부하는 것만으로는 성취하기가 불가능합니다.
전자 메일 주소의 정당성을 진정으로 확인하는 유일한 방법은 메일을 보내려는 것입니다. 심지어 그 주소에서 메일이 수락되었다는 것을 알려주고 사람이받는 것이 아니라고 말합니다. 대본을 받거나 조용히 버려지기를 반대하는 경우), 그것이 인간에 의해 접수되었다고하더라도, 자신이 소유하고 있다고 주장하는 사람은 아무런 보증을하지 않습니다. ("이메일 주소는 [email protected]
입니다.")
정규식을 사용하여 이메일 주소의 유효성을 검사하지 마십시오. 이것은 다시 발명 할 필요가없는 바퀴이며, 끔찍한 털이 많은 정규 표현식을 작성하지 않으면 유효하지 않은 이메일 주소를 통과 시키거나 유효한 메일을 거부하게됩니다.
CPAN에는 Email::Valid과 같은 많은 모듈이있어 모든 것을 처리하고 시험 및 테스트를 거쳤습니다.
간단한 예 :
use Email::Valid;
print (Email::Valid->address('[email protected]') ? 'yes' : 'no');
훨씬 간단하고, 단지 작동합니다. Mail::RFC822::Address을 사용 또는
: 정규 표현식이 성공적으로 모든 RFC822 호환 주소를 처리 할 수 있어야합니다 얼마나 털이의 예를 들어
if (Mail::RFC822::Address::valid('[email protected]')) { ...}
는 this beauty를보십시오.
전자 메일 주소 유효성 검사를 직접 수행하려는 사람들은 구문 상 유효하지 않은 주소를 통과시키고 심지어는 더 나쁜 경우 완벽하게 유효한 주소를 거부하는 코드로 끝나는 경향이 있습니다.
예를 들어 어떤 사람들은 [email protected]
과 같이 주소에 +
을 사용합니다.이를 "주소 태그"또는 "하위 주소 지정"이라고합니다. 유효성 확인에 대한 순진한 시도는이를 거부하고 고객은 다른 곳으로 이동하게됩니다.
또한 이전에는 TLD가 항상 2 또는 3 자라고 가정하는 사람들이있었습니다. 예를 들어 .info
이 출시되면 해당 도메인의 주소를 가진 사람들은 완벽하게 유효한 이메일 주소가 허용되지 않는다고 전했다.
마지막으로 문법적으로 유효한 "Mickey Mouse"@example.com
, [email protected][1.2.3.4]
과 같은 일부 병리학 적 사례가 있지만 대부분의 사람들의 손으로 구속 된 유효성 확인은 거절합니다.
위의 모든 작성자는 .
이 어떤 문자도 허용한다는 점을 인식하여 다른 RegEx 질문에 대한 응답으로이 편집 캡처 위젯이 백 슬래시를 먹는 것을 발견했습니다.
이 (! 그것이 문제입니다)
좋아요 ... 이제 제대로 만들어 보자 :
는^\s*([_a-zA-Z0-9]+(\\.[_a-zA-Z0-9\\-\\%]+)\*)@([a-zA-Z0-9]+(\\.[a-zA-Z0-9\\-]+)\*(\\.[a-zA-Z]{2,4}))\s*$
이것은 또한 허용 - 내부 값으로 %
문자를 포함합니다. 이 루틴의 문제는 RegEx가 "greedy"이고 .com
및 .edu
과 일치하는 것으로 간주되는 종료 조건이 오버 슈팅 (overshoot)하기 때문에 전자 메일 주소를 파싱하는 것이 실제로 매우 효율적이지만 그다지 효율적이지 않습니다. , 상당한 CPU 시간을 소비하면서 되돌아 갈 필요가 있습니다.
실제 응답은 다른 포스터가 추천 한대로이 작업과 관련된 루틴을 사용하는 것입니다. CPAN 모듈이 없거나 타겟 환경이 없다면 RegEx 해킹은 틀림없이 받아 들여질 것입니다.
로컬 부분에 여전히 유효한 구두점 문자가 누락되었습니다. 그리고 유효한 TLD와 일치하는 것에 대해 여전히 제한적입니다. [.museum] (http://index.museum/) –
아마도이 정규 표현식을 사용합니까?
^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$
는
전임의 사제입니까? 권자 – Yoda
아니, 100 %에서 찍은. – BoltClock
제발 그 이상 자세한 내용을 줄 수 있습니까? – Yoda
이것은 잘못된 전자 메일 주소를 허용하지만 유효한 [RFC 3598] (http://www.ietf.org/rfc/rfc3598.txt) 전자 메일 주소는 허용하지 않습니다. 바퀴를 재발 명하려고하지 마십시오. 해당 작업을위한 CPAN 모듈이 있습니다. – Alessandro