簡體   English   中英

PHP中的電子郵件地址驗證(filter_var除外)

[英]Email address validation in php (other than filter_var)

嘿,這是我關於電子郵件地址過濾的第二個問題,但我真的很偏執,我不喜歡人們仍然可以“繞過” PHP中的默認電子郵件地址驗證這一事實。

一個例子:

$i = "email@[1.1.1.1]";
if (!filter_var($i, FILTER_VALIDATE_EMAIL)) {
$msg = "Invalid email address"; 
} else { echo "valid email!"; }

如果您想知道的話,它會回顯“有效的電子郵件!”。

有沒有阻止它的解決方案? 我希望人們只能使用常規電子郵件地址(name@domain.ltd)進行注冊。 一個復雜的正則表達式? 圖書館? 我似乎找不到解決方案。

再次感謝。

那是一個有效的電子郵件地址。 所以...我看不到問題。 但是您可以執行以下操作(當然,這可以在一個函數中利用所有過濾方法,因此可以將其縮短一點):

function filtervariable($string,$type,$method) {
    //function for sanitizing variables using PHPs built-in filter methods
    $validEmail = false;

    if ($method == 'sanitize') {
        $filtermethod = 'FILTER_SANITIZE_';
    } elseif ($method == 'validate') {
        $filtermethod = 'FILTER_VALIDATE_';
    } else {
        return;
    }
    switch ($type) {
        case 'email':
        case 'string':
        case 'number_int':
        case 'int':
        case 'special_chars':
        case 'url':
        $filtertype = $filtermethod.strtoupper($type);
        break;
    }

    if ($filtertype == 'FILTER_VALIDATE_EMAIL' && !empty($string)) {
        list($local,$domain) = explode('@',$string);

        $localLength = strlen($local);
        $domainLength = strlen($domain);

        $checkLocal = explode('.',$domain);

        if (($localLength > 0 && $localLength < 65) && ($domainLength > 3 && $domainLength < 256) && (checkdnsrr($domain,'MX') || checkdnsrr($domain,'A') || ($checkLocal[1] == 'loc' || $checkLocal[1] == 'dev' || $checkLocal[1] == 'srv'))) { // check for "loc, dev, srv" added to cater for specific problems with local setups
            $validEmail = true;
        } else {
            $validEmail = false;
        }
    }
    if (($filtertype == 'FILTER_VALIDATE_EMAIL' && $validEmail) || $filtertype != 'FILTER_VALIDATE_EMAIL') {
        return filter_var($string, constant($filtertype));
    } else {
        return false;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM