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




string email (9)

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

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

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


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

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}) या कुछ समान है।


निरंतर regex के आधार पर .. आईपी पता डोमेन के साथ भी काम करता है।

$pattern="/(?:[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-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-Za-z0-9-]*[A-Za-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/";

//$pattern="/[A-Za-z0-9_-][email protected][A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/";

$subject="Hello [email protected] francis [email protected] words [email protected] words 2 words123 [email protected]";


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

मंडेलेका के उत्तर पर बिल्डिंग, स्पेस डिलीमीटर का उपयोग करके स्ट्रिंग को तोड़ें, फिर 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)

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


यदि ईमेल पता हमेशा स्ट्रिंग के सामने होता है, तो इसे प्राप्त करने का सबसे आसान तरीका केवल स्पेस कैरेक्टर के सभी उदाहरणों पर स्ट्रिंग को विभाजित करना है, और उसके बाद परिणामस्वरूप सरणी से पहला मान लें।

बेशक, यह सुनिश्चित करना सुनिश्चित करें कि इसका उपयोग करने से पहले यह ईमेल पते जैसा कुछ है।

विवरण के लिए PHP 'विभाजन' फ़ंक्शन देखें।


यह छोटी 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],

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

(?:[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));




email