I have a method which receives a contact in one of the following formats:
1 - "email@domain.com"
2 - "Name <email@domain.com>" OR "Name<email@domain.com>" (Spaces can exist)
If it is in format (1) I do nothing. In case of (2) I need to parse the name and email.
I never know in which format I will get the emails. But it will be one of the two.
How can I do this?
There is actually already a .NET class called MailAddress that can do this for you quite simply.
UPDATE: It can not only get the display name but also the email address, username, and host.
First include using System.Net.Mail
and then you can get the info with something like this:
MailAddress email = new MailAddress("Johnny <johnny@example.com>");
string displayName = email.DisplayName;
string address = email.Address;
string user = email.User;
string host = email.Host;
This will work with the two scenarios that you described so "Name <email@domain.com>"
and "Name<email@domain.com>"
both work and give you Name
. I went on and created a test that can be found here that will give you the sample output of:
'email@domain.com' =
DisplayName = ''
Address = 'email@domain.com'
User = 'email'
Host = 'domain.com'
'Name<email@domain.com>' =
DisplayName = 'Name'
Address = 'email@domain.com'
User = 'email'
Host = 'domain.com'
'Name <email@domain.com>' =
DisplayName = 'Name'
Address = 'email@domain.com'
User = 'email'
Host = 'domain.com'
MailAddress
is a great solution, but unfortunately System.Net.Mail
has not yet been ported to .NET Core.
I find that the following Regex solution works for reasonably well-formed inputs:
var re = new Regex(@"""?((?<name>.*?)""?\s*<)?(?<email>[^>]*)");
var match = re.match(input);
var name = match.Groups["name"].Value;
var email = match.Groups["email"].Value;
I have tested this with the following kinds of inputs:
bob@example.com
<bob@example.com>
Bob Example <bob@example.com>
Bob Example<bob@example.com>
"Bob Example" <bob@example.com>
"Example, Bob J." <bob@example.com>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With