2010-02-24 9 views
8

मैं निम्नलिखित स्ट्रिंगरेगेक्स: "@" प्रतीक से पहले ईमेल कैसे पट्टी करें?

First Last <[email protected]> 

है मैं regex & PHP का उपयोग ईमेल स्ट्रिंग से

"first.last" 

निकालने के लिए चाहते हैं। इसके बारे में कैसे जाना है?

अग्रिम धन्यवाद!

+0

उत्तर देखने में, आप यह ध्यान रखना चाहेंगे कि "e \ @w" @ example.com' तकनीकी रूप से एक मान्य ईमेल पता है। – Erik

+0

बस एहसास हुआ कि केवल ईमेल पते की तुलना में स्ट्रिंग के लिए और भी कुछ था। –

+0

आपको ['s ($ str) -> पहले से पहले ('@')'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L399) मिल सकता है सहायक, जैसा कि [इस स्टैंडअलोन लाइब्रेरी] में पाया गया है (https://github.com/delight-im/PHP-Str)। – caw

उत्तर

5

मैं जानता हूँ कि इस सवाल का जवाब पहले से ही स्वीकार कर लिया गया है, लेकिन इस के प्रारूप में किसी भी मान्य ईमेल पता पर काम करेंगे: Name <[email protected]>

// Yes this is a valid email address 
$email = 'joey <"[email protected]"@example.com>'; 

echo substr($email, strpos($email,"<")+1, strrpos($email, "@")-strpos($email,"<")-1); 
// prints: "[email protected]" 

अन्य पोस्ट समाधान के अधिकांश वैध के एक नंबर पर असफल हो जायेगी ईमेल पता।

2

क्या आप इसके बजाय एक स्प्लिट फ़ंक्शन का उपयोग नहीं कर सकते? मैं PHP का उपयोग नहीं करता लेकिन ऐसा लगता है कि यह उपलब्ध होने पर यह बहुत आसान होगा।

1

हैं कि सटीक प्रारूप आप मिल जाएगा, तो regex के खिलाफ मिलान है

/<([^@<>]+)@([^@<>]+)>/ 

आप जैसे दे देंगे कब्जा समूह 1 में first.last और email.com कैप्चर समूह 2.

+0

ध्यान दें कि यह एकाधिक पते वाले ईमेल पतों पर चोक करता है। मुझे संदेह है कि यह उपयोगकर्ताओं के विशाल बहुमत के लिए एक समस्या है - और इस मामले में, एक समाधान जो 99.9% काम करता है, वह पिछले 0.1% सही तरीके से काम करने में शामिल प्रयासों के 0.1% से कम लेता है। –

+0

/थोड़ा/अधिक काम के साथ, आप स्ट्रिंग में अंतिम @ ढूंढ सकते हैं यह जानकर कि आरएफसी के अनुसार, नाम उस अंतिम @ से पहले का हिस्सा है। – Erik

5
$str ="First Last <[email protected]>"; 
$s = explode("@",$str); 
$t = explode("<",$s[0]); 
print end($t); 
+0

घोस्टडॉग, मुझे यह समाधान भी पसंद है, लेकिन उचित होने के लिए मेरे प्रश्न ने रेगेक्स के लिए कहा। लेकिन फिर भी आपका समाधान बहुत अच्छा काम करता है, आपकी प्रतिक्रिया के लिए धन्यवाद! – st4ck0v3rfl0w

+0

बीटीडब्ल्यू, प्रिंट एंड() क्या करता है? – st4ck0v3rfl0w

+0

पर्याप्त मेला। यह तुम्हारी पसंद है। मैंने आपके विशेष स्ट्रिंग नमूने के लिए बस एक सरल विकल्प प्रस्तुत किया है। अंत ($ टी) सरणी का अंतिम तत्व है। अधिक – ghostdog74

0

regexp उपयोग करने के लिए कोई ज़रूरत नहीं है; कुछ सरल स्ट्रिंग फ़ंक्शंस का उपयोग करने के लिए और अधिक कुशल।

$string = 'First Last <[email protected]>'; 
$name = trim(substr($string, 0, strpos($string, '<'))); 
+0

के लिए PHP दस्तावेज़ों की जांच करें, इसके अलावा आप अपने परिणाम के रूप में "फर्स्ट लास्ट" प्राप्त कर रहे हैं, न कि "first.last" – Erik

3

यह एक बहुत (यह जांच करना कि ईमेल वैध है के बाद) आसान है:

 
$email = '[email protected]'; 
$split = explode('@',$email); 
$name = $split[0]; 
echo "$name"; // would echo "my.name" 

वैधता की जांच करने के लिए, आप ऐसा कर सकता है:

 
function isEmail($email) { 
    return (preg_match('/[\w\.\-][email protected][\w\.\-]+\.\[w\.]/', $email)); 
} 
if (isEmail($email)) { ... }

First Last <[email protected]> से बाहर निकालने के लिए ईमेल के रूप में ,

 
function returnEmail($contact) { 
    preg_match('\b[\w\.\-][email protected][\w\.\-]+\.\[w\.]\b', $contact, $matches); 
    return $matches[0]; 
} 
संबंधित मुद्दे