2015-11-23 15 views
6

tôi muốn trích xuất địa chỉ email từ một chuỗi, ví dụ:Extract địa chỉ email từ chuỗi - php

<?php // code 
$string = 'Ruchika <[email protected]>'; 
?> 

Từ chuỗi ở trên tôi chỉ muốn có được địa chỉ email [email protected].

Vui lòng đề xuất cách thực hiện điều này.

+0

Bạn nên sử dụng PHPs preg * chức năng để làm như vậy. Xây dựng cụm từ thông dụng phù hợp với từng và mọi địa chỉ email không phải là một nhiệm vụ dễ dàng, hãy xem cuộc thảo luận này để biết chi tiết: http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email -address – maxhb

Trả lời

9

Hãy thử điều này

<?php 
    $string = 'Ruchika <[email protected]>'; 
    $pattern = '/[a-z0-9_\-\+\.][email protected][a-z0-9\-]+\.([a-z]{2,4})(?:\.[a-z]{2})?/i'; 
    preg_match_all($pattern, $string, $matches); 
    var_dump($matches[0]); 
?> 

thấy demo here

phương pháp thứ hai

<?php 
    $text = 'Ruchika <[email protected]>'; 
    preg_match_all("/[\._a-zA-Z0-9-][email protected][\._a-zA-Z0-9-]+/i", $text, $matches); 
    print_r($matches[0]); 
?> 

Xem demo here

+0

Cảm ơn bạn! Nó hoạt động hoàn hảo cho tôi :) –

+0

vui vì nó đã giúp bạn. xem xét chấp nhận câu trả lời :) –

+1

FYI - chỉ hoạt động trên các tên miền cơ bản như gmail.com. Nó sẽ hoạt động trên một địa chỉ email từ một tên miền phụ mail như [email protected] –

1

Check-out hai bài viết stackoverflow:

No. 1 Để đọc thêm.

No. 2 Để đọc thêm.

1

thử mã này.

<?php 

function extract_emails_from($string){ 
    preg_match_all("/[\._a-zA-Z0-9-][email protected][\._a-zA-Z0-9-]+/i", $string, $matches); 
    return $matches[0]; 
} 

$text = "blah blah blah blah blah blah [email protected]"; 

$emails = extract_emails_from($text); 

print(implode("\n", $emails)); 

?> 

Điều này sẽ hiệu quả.

Cảm ơn.

0

này được dựa trên phản ứng Niranjan của, giả sử bạn có email đầu vào kèm theo trong vòng < và> ký tự). Thay vì sử dụng cụm từ thông dụng để lấy địa chỉ email, ở đây tôi nhận được phần văn bản giữa các ký tự < và>. Nếu không, tôi sử dụng chuỗi để nhận toàn bộ email. Tất nhiên, tôi đã không thực hiện bất kỳ xác nhận về địa chỉ email, điều này sẽ phụ thuộc vào kịch bản của bạn.

<?php 
    $string = 'Ruchika <[email protected]>'; 
    $pattern = '/<(.*?)>/i'; 

    preg_match_all($pattern, $string, $matches); 
    var_dump($matches); 
    $email = $matches[1][0] ?? $string; 
    echo $email; 
?> 

Đây là a forked demo.

Tất nhiên, nếu giả định của tôi không đúng, thì cách tiếp cận này sẽ không thành công. Nhưng dựa trên đầu vào của bạn, tôi tin rằng bạn muốn trích xuất các email được đính kèm trong các ký tự < và>.

1

Phân tích địa chỉ email là một công việc điên rồ và sẽ dẫn đến biểu thức chính quy rất phức tạp. Ví dụ: hãy xem xét cụm từ thông dụng chính thức này để nắm bắt địa chỉ e-mail: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

Tuyệt vời phải không?

Thay vào đó, có một hàm php chuẩn để thực hiện việc này được gọi là mailparse_rfc822_parse_addresses() và được ghi lại here.

Phải mất một chuỗi làm đối số và trả về một mảng mảng liên kết với các phím hiển thị, địa chỉ và is_group.

Vì vậy,

$to = 'Wez Furlong <[email protected]>, [email protected]'; 
var_dump(mailparse_rfc822_parse_addresses($to)); 

sẽ mang lại:

array(2) { 
    [0]=> 
    array(3) { 
    ["display"]=> 
    string(11) "Wez Furlong" 
    ["address"]=> 
    string(15) "[email protected]" 
    ["is_group"]=> 
    bool(false) 
    } 
    [1]=> 
    array(3) { 
    ["display"]=> 
    string(15) "[email protected]" 
    ["address"]=> 
    string(15) "[email protected]" 
    ["is_group"]=> 
    bool(false) 
    } 
} 
Các vấn đề liên quan