filter_var 함수를 사용하여 전자 메일 주소의 유효성을 검사하기로 한 양식의 유효성 검사를 설정하는 중입니다. filter_var이 실제로 어디서나 허용하는 것을 알 수는 없지만 (문서가 매우 간단하기 때문에), test @ test와 같은 전자 메일 주소를 허용한다는 사실을 알게되었습니다. 도메인에 .com, .net 등이 있어야하지 않습니까?
답변
동작이 4 월 중 일부 어딘가에 변경되었습니다. bug #49576 및 revision 297350을 참조하십시오.
전자 메일이 실제로 유효하지 않거나 적어도 PHP 개발자가 이해 한 것입니다.
/*
* The regex below is based on a regex by Michael Rushton.
* However, it is not identical. I changed it to only consider routeable
* addresses as valid. Michael's regex considers [email protected] a valid address
* which conflicts with section 2.3.5 of RFC 5321 which states that:
*
* Only resolvable, fully-qualified domain names (FQDNs) are permitted
* when domain names are used in SMTP. In other words, names that can
* be resolved to MX RRs or address (i.e., A or AAAA) RRs (as discussed
* in Section 5) are permitted, as are CNAME RRs whose targets can be
* resolved, in turn, to MX or address RRs. Local nicknames or
* unqualified names MUST NOT be used.
changelog는 PHP 5.3.3과 PHP 5.2.14이 버그 수정을 언급 : 소스는이 통지서를 전달합니다.
이 버그 티켓은 PHP5.3.3 및 PHP5.2.14로 수정되었습니다. – Gordon
Great catch Artefacto. 그래서 나는 규칙이 바뀌 었다고 생각하니? 왜 이것이 바뀌 었습니까? 나는 그들이 filter_var 문서에서 무엇을 검사하는지 설명하기를 바란다. 5.3.3 이전에는 true가 반환되고 5.3.3 이후에는 false가 반환됩니까? 내가 사용하고있는 시스템은 5.2.12 – Metropolis
입니다. @Metro 인터넷 표준을 준수하는지 이메일을 확인합니다. 이전에'test @ test'가 허락되었다는 사실은 버그였습니다. – Artefacto
유효한 이메일 주소입니다. 인터넷에서 작동하지는 않습니다 (적어도 오늘은 아니지만). 그러나 로컬 주소에는 적합합니다.
나는 개발자들이 전자 메일 주소를 확인하고 새 TLD가 도입되는 즉시 구식이 보장되는 시스템을 구축하지 않는 것이 합리적이라고 생각합니다. [email protected]
을 거부하는 이메일 주소 구문 검사기가 충분합니다.
RFC 5321의 섹션 2.3.5가 적용되지 않습니까? – Artefacto
아니요, test
은 로컬/내부 네트워크 도메인 일 수 있습니다. 예를 들어 개발할 때 [email protected]
을 올바르게 검증하는 것이 좋습니다.
보통 nonexistentdomain.foo
에 동일한 문제가 있습니다. 호스트에 어떤 항목이 있는지 여부를 테스트하려면 getmxrr
을 사용하십시오 (실패한 경우 gethostbyname()
으로 폴백).
로컬 주소를 허용하는 것이 가장 좋습니다. 또는 test @ test와 같은 것을 허용하고 싶지 않으면 getmxrr과 함께 사용해야합니까? – Metropolis
checkdnsrr을 사용하여 확인하는 것이 좋을까요? 왜냐하면 서버가 다운되었거나 다른 것이 있으면 getmxrr은 false를 반환 할 것이기 때문입니다. 권리? – Metropolis
로컬 주소 (대부분 알려진 IP 범위에 있음)를 원하면/허용 할 수 있습니다. MX 또는 A 레코드 (MX가 정의되지 않은 경우 폴백이어야 함)를 확인하더라도 실제로 checkdnsrr ('hostname', 'ANY')을 사용할 수는 있지만 나에게 발생하지 않았습니다. 등록 된 도메인 A & MX 레코드가 없어 전달할 수 없음). checkdnsrr/gethostbyname/getmxrr은 모두 afaik와 동일한 메커니즘을 사용하므로 DNS 서버가 다운되었거나 느린 경우 모든 옵션에서 실패하거나 느려집니다. – Wrikken
test @ test는 구문 적으로 유효합니다. RFC 5321에서
: 이메일 주소 자체에 의해 사용되는 최상위 도메인의 경우
는 단일 문자열은 어떤 점없이 사용됩니다. 오직이 후
그것은 말하는가 : 도메인 이름은 SMTP에서 사용하는 경우
만 분해, 정규화 된 도메인 이름 (FQDN에)이 를 허용됩니다. 다시 말해 이 MX RR 또는 주소 (즉, A 또는 AAAA) RR (섹션 5의 )에서 해결 될 수있는 이름이 허용되며 CNAME RR의 대상이 인 경우 MX로 확인됩니다. 또는 주소 RRs. 국지 별칭 또는 규정되지 않은 이름을 사용해서는 안됩니다.
이것은 반드시 TLD 전용 도메인 이름을 배제하지 않습니다. 사실, 다음 코드를 실행합니다 :
checkdnsrr('ua', 'MX') // Returns true
getmxrr('ua', $array) // Returns true
TLD 전용 도메인 이름 (수) MX 레코드를 가지고 이 사용 다음과 같습니다 http://www.to/은 예입니다.그리고 여기에 몇 가지 유효한 TLD 전용 도메인 이름 이메일 주소입니다 :
이빈스 @가
폴 @ IO
루트 @ km
주스 @ 관리 @ 고작
TK 인공 지능hostmaster @ ua
예제 소스 이메일 addre sses : Tony Finch – TLDs with MXs
- 1. Java가 식별자에서 제어 문자를 허용하는 이유는 무엇입니까?
- 2. filter_var()가 부울 값으로 0을 허용하지 않는 이유는 무엇입니까?
- 3. webdriver-test를 사용할 수 없습니다.
- 4. 레이블에 고정 폭을 허용하는 이유는 무엇입니까?
- 5. Java가 크기 0의 배열을 허용하는 이유는 무엇입니까?
- 6. PHP의 filter_var() FILTER_VALIDATE_URL
- 7. ([email protected]) 및 (- $ email-)으로 이메일을 보내는 방법은 무엇입니까?
- 8. PHP - filter_var 및 FILTER_VALIDATE_FLOAT
- 9. PHP는 filter_var 기능
- 10. PHP : filter_var sanitization만큼 안전합니까?
- 11. PHP의 filter_var 여기
- 12. db : test : clone, db : test : clone_structure, db : test : load 및 db : test : prepare의 차이점은 무엇입니까?
- 13. Perl -e Test Oddity?
- 14. Send Email From Database
- 15. test`
- 16. [email protected]
- 17. PHP의 filter_var, 좋은 현대적인 솔루션입니까?
- 18. 은 apple에서 reachability-test를 복사했지만 링커가 실패했습니다.
- 19. Objective-C가 메서드 정의의 끝에서 세미콜론을 허용하는 이유는 무엇입니까?
- 20. UIComponent의 encodeXxx 메소드가 FacesContext 매개 변수를 허용하는 이유는 무엇입니까?
- 21. VB.NET의 삼항 연산자가 Nullable Boolean을 허용하는 이유는 무엇입니까?
- 22. Java main() 메서드가 String args 배열을 허용하는 이유는 무엇입니까?
- 23. TypedDataSet : .NET Framework에서 int datatable 열의 문자열을 허용하는 이유는 무엇입니까?
- 24. 스칼라 XML API : 노드 값을 속성 값으로 허용하는 이유는 무엇입니까?
- 25. Conection을 허용하는 동안 "잘못된 인수"가 표시되는 이유는 무엇입니까?
- 26. 초기화되지 않은 상수 Test :: Unit :: AutoRunner :: Priority 오류가 발생하는 이유는 무엇입니까?
- 27. CSS에서 label = = "email"을 선택하는 방법은 무엇입니까?
- 28. Email :: Stuff를 사용하는 방법의 예는 무엇입니까?
- 29. Rails Test :: Unit 테스트에서 내 조명기 오브젝트를 사용할 수없는 이유는 무엇입니까?
- 30. Python을 통해 Outlook Email 보내기?
기술적으로 'test'는 로컬 네트워크의 유효한 호스트 이름 일 수 있으므로 올바른 것으로 가정합니다. –
코드를 게시 할 수 있습니까? var_dump (filter_var ('test @ test.', FILTER_VALIDATE_EMAIL)); 은 나를 위해 false를 반환합니다! – Youssef
도트가없는 test @ test도 false를 반환합니다. – Youssef