1496 | | // Test for the minimum length the email can be |
1497 | | if ( strlen( $email ) < 3 ) { |
1498 | | return apply_filters( 'is_email', false, $email, 'email_too_short' ); |
1499 | | } |
1500 | | |
1501 | | // Test for an @ character after the first position |
1502 | | if ( strpos( $email, '@', 1 ) === false ) { |
1503 | | return apply_filters( 'is_email', false, $email, 'email_no_at' ); |
1504 | | } |
1505 | | |
1506 | | // Split out the local and domain parts |
1507 | | list( $local, $domain ) = explode( '@', $email, 2 ); |
1508 | | |
1509 | | // LOCAL PART |
1510 | | // Test for invalid characters |
1511 | | if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) { |
1512 | | return apply_filters( 'is_email', false, $email, 'local_invalid_chars' ); |
1513 | | } |
1514 | | |
1515 | | // DOMAIN PART |
1516 | | // Test for sequences of periods |
1517 | | if ( preg_match( '/\.{2,}/', $domain ) ) { |
1518 | | return apply_filters( 'is_email', false, $email, 'domain_period_sequence' ); |
1519 | | } |
1520 | | |
1521 | | // Test for leading and trailing periods and whitespace |
1522 | | if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) { |
1523 | | return apply_filters( 'is_email', false, $email, 'domain_period_limits' ); |
1524 | | } |
1525 | | |
1526 | | // Split the domain into subs |
1527 | | $subs = explode( '.', $domain ); |
1528 | | |
1529 | | // Assume the domain will have at least two subs |
1530 | | if ( 2 > count( $subs ) ) { |
1531 | | return apply_filters( 'is_email', false, $email, 'domain_no_periods' ); |
1532 | | } |
1533 | | |
1534 | | // Loop through each sub |
1535 | | foreach ( $subs as $sub ) { |
1536 | | // Test for leading and trailing hyphens and whitespace |
1537 | | if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) { |
1538 | | return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' ); |
1539 | | } |
1540 | | |
1541 | | // Test for invalid characters |
1542 | | if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) { |
1543 | | return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' ); |
1544 | | } |
1545 | | } |
1546 | | |
1547 | | // Congratulations your email made it! |
1548 | | return apply_filters( 'is_email', $email, $email, null ); |
| 1496 | if (!filter_var($email, FILTER_VALIDATE_EMAIL) ) |
| 1497 | return apply_filters( 'is_email', false, $email, 'invalid_email' ); |
| 1498 | else |
| 1499 | return apply_filters( 'is_email', $email, $email, null ); |
1714 | | // Test for the minimum length the email can be |
1715 | | if ( strlen( $email ) < 3 ) { |
1716 | | return apply_filters( 'sanitize_email', '', $email, 'email_too_short' ); |
1717 | | } |
1718 | | |
1719 | | // Test for an @ character after the first position |
1720 | | if ( strpos( $email, '@', 1 ) === false ) { |
1721 | | return apply_filters( 'sanitize_email', '', $email, 'email_no_at' ); |
1722 | | } |
1723 | | |
1724 | | // Split out the local and domain parts |
1725 | | list( $local, $domain ) = explode( '@', $email, 2 ); |
1726 | | |
1727 | | // LOCAL PART |
1728 | | // Test for invalid characters |
1729 | | $local = preg_replace( '/[^a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]/', '', $local ); |
1730 | | if ( '' === $local ) { |
1731 | | return apply_filters( 'sanitize_email', '', $email, 'local_invalid_chars' ); |
1732 | | } |
1733 | | |
1734 | | // DOMAIN PART |
1735 | | // Test for sequences of periods |
1736 | | $domain = preg_replace( '/\.{2,}/', '', $domain ); |
1737 | | if ( '' === $domain ) { |
1738 | | return apply_filters( 'sanitize_email', '', $email, 'domain_period_sequence' ); |
1739 | | } |
1740 | | |
1741 | | // Test for leading and trailing periods and whitespace |
1742 | | $domain = trim( $domain, " \t\n\r\0\x0B." ); |
1743 | | if ( '' === $domain ) { |
1744 | | return apply_filters( 'sanitize_email', '', $email, 'domain_period_limits' ); |
1745 | | } |
1746 | | |
1747 | | // Split the domain into subs |
1748 | | $subs = explode( '.', $domain ); |
1749 | | |
1750 | | // Assume the domain will have at least two subs |
1751 | | if ( 2 > count( $subs ) ) { |
1752 | | return apply_filters( 'sanitize_email', '', $email, 'domain_no_periods' ); |
1753 | | } |
1754 | | |
1755 | | // Create an array that will contain valid subs |
1756 | | $new_subs = array(); |
1757 | | |
1758 | | // Loop through each sub |
1759 | | foreach ( $subs as $sub ) { |
1760 | | // Test for leading and trailing hyphens |
1761 | | $sub = trim( $sub, " \t\n\r\0\x0B-" ); |
1762 | | |
1763 | | // Test for invalid characters |
1764 | | $sub = preg_replace( '/[^a-z0-9-]+/i', '', $sub ); |
1765 | | |
1766 | | // If there's anything left, add it to the valid subs |
1767 | | if ( '' !== $sub ) { |
1768 | | $new_subs[] = $sub; |
1769 | | } |
1770 | | } |
1771 | | |
1772 | | // If there aren't 2 or more valid subs |
1773 | | if ( 2 > count( $new_subs ) ) { |
1774 | | return apply_filters( 'sanitize_email', '', $email, 'domain_no_valid_subs' ); |
1775 | | } |
1776 | | |
1777 | | // Join valid subs into the new domain |
1778 | | $domain = join( '.', $new_subs ); |
1779 | | |
1780 | | // Put the email back together |
1781 | | $email = $local . '@' . $domain; |
1782 | | |
1783 | | // Congratulations your email made it! |
1784 | | return apply_filters( 'sanitize_email', $email, $email, null ); |
| 1665 | |
| 1666 | // Sanitize first |
| 1667 | $email = filter_var($email, FILTER_SANITIZE_EMAIL); |
| 1668 | |
| 1669 | // Check it for validity |
| 1670 | if ( FALSE === filter_var($email, FILTER_VALIDATE_EMAIL) ) |
| 1671 | return apply_filters( 'sanitize_email', '', $email, 'invalid_email' ); |
| 1672 | else |
| 1673 | return apply_filters( 'sanitize_email', $email, $email, null ); |