?
Solved

HOe to remove chars with php function?

Posted on 2011-09-28
12
Medium Priority
?
252 Views
Last Modified: 2012-05-12
Im tring to extract the email from the next strin
I tried using str_replace but it didnt helped for "<" " >"

From: <email@name.com>
0
Comment
Question by:Nura111
  • 4
  • 4
  • 3
  • +1
12 Comments
 
LVL 8

Expert Comment

by:PranjalShah
ID: 36729498
Are you trying to extract just email or email@name.com?
0
 

Author Comment

by:Nura111
ID: 36734269
email@name.com
0
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 36736496
You can use a regular expression with groups to get the information around the @ sign.  I'll show you an example in a moment.
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 111

Expert Comment

by:Ray Paseur
ID: 36736901
http://www.laprbass.com/RAY_temp_nura111.php
<?php // RAY_temp_nura111.php
error_reporting(E_ALL);
echo "<pre>";

// TEST DATA
$st1 = 'From: <email@name.com>';
$st2 = 'From: email@name.com';

$rgx
= '#'               // REGEX DELIMITER
. '\b'              // WORD BOUNDARY
. '([^ ]*?)'        // GROUP OF NON-BLANK CHARACTERS
. '([@]){1}'        // GROUP OF EXACTLY ONE AT-SIGN
. '(.*?)'           // GROUP OF ANYTHING
. '([.]){1}'        // GROUP OF EXACTLY ONE DOT
. '([^ ]){2,6}'     // GROUP OF NON-BLANK CHARACTERS (THE TLD)
. '\b'              // THE WORD BOUNDARY
. '#'               // REGEX DELIMITER
. 'i'               // CASE-INSENSITIVE
;

// FIND THE EMAIL
$new = $st1;
$new = str_replace('<', NULL, $new);
$new = str_replace('>', NULL, $new);
var_dump($new);
preg_match($rgx, $new, $mat);

// SHOW THE WORK PRODUCT
var_dump($rgx);
var_dump($mat);

// FIND THE EMAIL
$new = $st2;
$new = str_replace('<', NULL, $new);
$new = str_replace('>', NULL, $new);
var_dump($new);
preg_match($rgx, $new, $mat);

// SHOW THE WORK PRODUCT
var_dump($rgx);
var_dump($mat);

Open in new window

0
 
LVL 8

Expert Comment

by:PranjalShah
ID: 36737516
This worked for me..
$remove = array("<",">");
$replace = array("","");
$string = "<email@name.com>";
echo str_replace($remove,$replace,$string);

Open in new window

0
 
LVL 8

Accepted Solution

by:
PranjalShah earned 2000 total points
ID: 36739316
If FROM: is also a part of the string,

$remove = array("FROM:","<",">");
$replace = array("","","");
$string = "FROM:<email@name.com>";
echo str_replace($remove,$replace,$string);

Open in new window

0
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 36765670
Sorry... Even though the other REGEX worked, this is a better solution.  It puts the string length counts inside the parenthesized groups.
<?php // RAY_temp_nura111.php
error_reporting(E_ALL);
echo "<pre>";

// TEST DATA
$st1 = 'From: <email@name.com>';
$st2 = 'From: email@name.com';

$rgx
= '#'               // REGEX DELIMITER
. '\b'              // WORD BOUNDARY
. '([^ ]*?)'        // GROUP OF NON-BLANK CHARACTERS
. '([@]{1})'        // GROUP OF EXACTLY ONE AT-SIGN
. '(.*?)'           // GROUP OF ANYTHING
. '([.]{1})'        // GROUP OF EXACTLY ONE DOT
. '([^ ]{2,6})'     // GROUP OF NON-BLANK CHARACTERS (THE TLD)
. '\b'              // THE WORD BOUNDARY
. '#'               // REGEX DELIMITER
. 'i'               // CASE-INSENSITIVE
;

// FIND THE EMAIL
$new = $st1;
$new = str_replace('<', NULL, $new);
$new = str_replace('>', NULL, $new);
var_dump($new);
preg_match($rgx, $new, $mat);

// SHOW THE WORK PRODUCT
var_dump($rgx);
var_dump($mat);

// FIND THE EMAIL
$new = $st2;
$new = str_replace('<', NULL, $new);
$new = str_replace('>', NULL, $new);
var_dump($new);
preg_match($rgx, $new, $mat);

// SHOW THE WORK PRODUCT
var_dump($rgx);
var_dump($mat);

Open in new window

0
 
LVL 8

Expert Comment

by:rationalboss
ID: 36813916
or simply:

<?php
$text = "hello my email is this.is@my.email.com. check out my other email too at other@email.net. email me at <hello.world@manyworlds.org>";
$pattern="/([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@([ ]+|)([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)/i"; 
preg_match_all($pattern, $text, $matches); 
echo implode('<br />',$matches[0]);
?>

Open in new window

0
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 36813992
This seems to generate a false positive, accepting an email address for a TLD that does not exist (the longest TLD is "museum").

But that aside, you might find this article interesting.  It shows a similar issue - grabbing domain names - and shows the process that a programmer might use to develop the regular expression, with iterative development and testing.
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_7830-A-Quick-Tour-of-Test-Driven-Development.html

Best of luck with your project, ~Ray
<?php // RAY_temp_rationalboss.php
error_reporting(E_ALL);

// THE TEST CASE
$text = "hello my email is this.is@my.email.com. check out my other email too at other@email.net. email me at <hello.world@manyworlds.org>";

// AN ADDENDUM TO THE TEST CASE
$text .= '<a href="mailto:ray@gmail.com">email me</a> but not with a bogus@emailaddress.fladderap';

$pattern="/([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@([ ]+|)([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)/i";
preg_match_all($pattern, $text, $matches);
echo implode('<br />',$matches[0]);

Open in new window

0
 

Author Comment

by:Nura111
ID: 36905215
I'm already working with a valid email address but its inside the format I mentioned PranjalShah:

its not working and dont I need to remove the from also?
0
 
LVL 8

Expert Comment

by:PranjalShah
ID: 36905239
I also posted one if FROM: is part of the string. The code snippet I posted worked for me. Post the code you are trying.
0
 

Author Comment

by:Nura111
ID: 36905360
ok got it its was a problem because the string was changing by htmlspecailCars before so it didnt work
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article discusses how to implement server side field validation and display customized error messages to the client.
When it comes to security, close monitoring is a must. According to WhiteHat Security annual report, a substantial number of all web applications are vulnerable always. Monitis offers a new product - fully-featured Website security monitoring and pr…
This video teaches users how to migrate an existing Wordpress website to a new domain.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
Suggested Courses
Course of the Month16 days, 17 hours left to enroll

864 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question