php एक लंबी स्ट्रिंग से ईमेल पता कैसे प्राप्त करें




string email (11)

PHP में, मेरे पास एक स्ट्रिंग है:

$string = "[email protected] MIME-Version: bla bla bla";

मैं केवल ईमेल पता कैसे प्राप्त करूं? क्या मूल्य प्राप्त करने का कोई आसान तरीका है ??


यदि यह वास्तव में अंतरिक्ष से अलग है:

php > $matches = array();
php > preg_match('/^[^ ]*/', $string, $matches);
php > print_r($matches[0]);
[email protected]

मंडेलेका के उत्तर पर बिल्डिंग, स्पेस डिलीमीटर का उपयोग करके स्ट्रिंग को तोड़ें, फिर sanitize करने के लिए filter_var का उपयोग करें, फिर यह देखने के लिए मान्य करें कि क्या वैध ईमेल पता है या नहीं:

function extract_email_address ($string) {
    foreach(preg_split('/\s/', $string) as $token) {
        $email = filter_var(filter_var($token, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
        if ($email !== false) {
            $emails[] = $email;
        }
    }
    return $emails;
}

यदि आप सुनिश्चित नहीं हैं कि स्पेस से अलग स्ट्रिंग का कौन सा हिस्सा ई-मेल पता है, तो आप स्ट्रिंग को रिक्त स्थान और उपयोग करके विभाजित कर सकते हैं

filter_var($email, FILTER_VALIDATE_EMAIL)

प्रत्येक सबस्ट्रिंग पर।


नियमित रूप से अभिव्यक्तियों का उपयोग करके फ़िल्टर करने के लिए ईमेल पते वास्तव में मुश्किल हैं क्योंकि बहुत से संभावित स्वीकार्य पात्र हैं। यह किया जा सकता है, लेकिन आपको इसे ठीक करने के लिए कुछ लोगों को ट्विक करना पड़ सकता है।

आप इस तरह से कुछ शुरू कर सकते हैं:

$string = "[email protected] MIME-Version: bla bla bla";
$matches = array();
$pattern = '/[A-Za-z0-9_-][email protected][A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/'
preg_match($pattern,$string,$matches);

और फिर $ मैचों में आपका ईमेल पता होना चाहिए।


यह मेरे लिए काम किया

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\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-4][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])+)\])

एक स्ट्रिंग में किसी भी ईमेल पते का पता लगाएं


$text = 'First Last <[email protected]>'
$emails = array_filter(filter_var_array(filter_var_array(preg_split('/\s/', $text), FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL));

मैंने @ रोब लॉक के जवाब को भी संशोधित किया। मैंने पाया कि यह मेरे लिए काम नहीं करता है क्योंकि मुझे पहले स्पेस द्वारा कॉमा द्वारा विभाजित करना पड़ा था।

function extract_email_addresses($sString)
{
  $aRet = array();
  $aCsvs = explode(',', $sString);
  foreach($aCsvs as $sCsv)
  {
    $aWords = explode(' ', $sCsv);
    foreach($aWords as $sWord)
    {
        $sEmail = filter_var(filter_var($sWord, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
        if($sEmail !== false)
            $aRet[] = $sEmail;
    }
  }
  return $aRet;  
}

यह छोटी PHP स्क्रिप्ट हमें लंबे अनुच्छेद या पाठ से ईमेल पता निकालने में मदद करेगी। बस इस स्क्रिप्ट को पेस्ट करें और इसे एक PHP फ़ाइल (extract.php) के रूप में सहेजें:

$string="[email protected] MIME-Version: bla bla bla";

$pattern="/(?:[a-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\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-4][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])+)\])/";

preg_match_all($pattern, $string, $matches);

foreach($matches[0] as $email){
    echo $email.", ";
}
?>

उपरोक्त स्क्रिप्ट इस परिणाम का उत्पादन करेगी:

[email protected],

PHP में नियमित अभिव्यक्तियों पर नज़र डालें।

नियमित अभिव्यक्तियों के साथ आप किसी दिए गए स्ट्रिंग में किसी भी टेक्स्ट पैटर्न की पहचान कर सकते हैं। वे अविश्वसनीय रूप से उपयोगी हैं। तो भले ही आप किसी अन्य उत्तर से कोड स्निपेट को कॉपी-पेस्ट करने के साथ चिपके रहें, आपको इसमें थोड़ा और खोदने पर विचार करना चाहिए।

यह पहले थोड़ा जटिल हो सकता है लेकिन यह निश्चित रूप से प्रयास के लायक है।


@ रोब लॉकन के उत्तरों को अपडेट कर रहा है:

function extract_email_address ($string) {
   $emails = array();
   $string = str_replace("\r\n",' ',$string);
   $string = str_replace("\n",' ',$string);

   foreach(preg_split('/ /', $string) as $token) {
        $email = filter_var($token, FILTER_VALIDATE_EMAIL);
        if ($email !== false) { 
            $emails[] = $email;
        }
    }
    return $emails;
}

नियमित अभिव्यक्ति से मिलान करें - ([A-Za-z0-9-]+)@([A-Za-z0-9])\\.([az]{3}) या कुछ समान है।





email