Solved

ASP: need regexp for various email formats

Posted on 2014-04-25
17
364 Views
Last Modified: 2014-04-28
I need a regexp that allows emails as follows: name.tac@fr.mac.moneys
In addition to regular emails  like test@aol.com  

I found the following regexp, but it doesn't satisfy emails where more than 1 period.
Can you please explain what this current regexp is doing?

if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(args.Value))

And advise of a regexp that would accept various email types.
0
Comment
Question by:badtz7229
17 Comments
 
LVL 32

Expert Comment

by:Big Monty
Comment Utility
try this:

if( "^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$" )

taken from here:

http://www.markussipila.info/pub/emailvalidator.php?action=validate
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
Why not go by what is mentioned here:  http://www.regular-expressions.info/email.html

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

Open in new window


It's a bit generic, but I tend to agree with the author's logic regarding complex email validation. Besides, a regex can't tell you if the email address actually exists--only the receiving server can do that.
0
 
LVL 52

Expert Comment

by:Scott Fell, EE MVE
Comment Utility
RegEx always takes me some time.   For validating emails I have just been checking for the @ and length greater than 3 with something on both sides of the @.   There are a lot of new gtld's coming on line this year to watch for.

http://www.regular-expressions.info/email.html

New gtld's http://www.newtldlist.com/
0
 

Author Comment

by:badtz7229
Comment Utility
@Big Monty: this example wouldn't work on name.tac@fr.mac.moneys  but it did work for name.tac@fr.mac.mone

@kaufmed:      your solution unfortunately, did not work. not even for simple emails like test@aol.com  (weird)
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
Turn on case-insensitivity:

/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i

Open in new window


Note the trailing "i" on the above expression.

e.g.

http://jsfiddle.net/d89gZ/
0
 

Author Comment

by:badtz7229
Comment Utility
@kaufmed- that still didn't work. not even simple email addresses are accepted.
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
Did you check my sample code on JSFiddle? Every example you've given thus far validates in the sample. Updated to add additional prompts:

http://jsfiddle.net/d89gZ/1/
0
 
LVL 74

Accepted Solution

by:
käµfm³d   👽 earned 500 total points
Comment Utility
One last update:

http://jsfiddle.net/d89gZ/2/

You'll probably want to change the TLD check to be unbounded since you have "moneys" as one TLD. I've also switched the anchors from word boundaries ( \b ) to start of line ( ^ ) and end of line ( $ ), since it seems as though the entire string you are testing is in the email address (and it is not a substring of a larger string).

if (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(args.Value)) {

Open in new window

0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 

Author Closing Comment

by:badtz7229
Comment Utility
yes this worked for the types of emails i'm dealing with. thanks.

can you please explain what this regexp does and during what conditions it would fail?
i'm new to this.
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
^               - Matches start of string
[A-Z0-9._%+-]+  - Matches one or more ( + ) of any ( [...] ) letter ( A-Z ), number ( 0-9 ), period/full stop, underscore, percent, plus, or hypen ( ._%+- )
@               - Matches literal @
[A-Z0-9.-]+     - Matches one or more ( + ) of any ( [...] ) letter ( A-Z ), number ( 0-9 ), period/full stop ( . ), or hyphen ( - )
\.              - Matches literal period/full stop
[A-Z]{2,}       - Matches at least two ( {2,} ) of any ( [...] ) letter ( A-Z )
$               - Matches end of string
i               - Turns on case-insensitivity

Open in new window


The net effect is that you find one or more "words" each separated by a period/full stop (if present), then an @ symbol, then one or more "words" each separated by a period/full stop (if present), then the last period/full stop, then the TLD. The TLD must be at least two characters (e.g. .co, .us, .jp, etc.).

As far as when it "fails," I take it you mean what inputs will it reject? Anything with two @ symbols will be rejected. If the part trailing the @ does not have at least one dot, then that will be rejected. Anything with special characters other than period/full stop, underscore, percent, plus, or hyphen (e.g. $, ^, &, etc. ) will be rejected. (To be fair, & is actually a valid character in email addresses, as are many others. It is in less common usage, though.) If the TLD contains numbers, then it will be rejected.
0
 

Author Comment

by:badtz7229
Comment Utility
Thank u for explanation
0
 

Author Comment

by:badtz7229
Comment Utility
could i have also used
 if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/.test(args.Value)) {

seems to be this works just as well?
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
\w is shorthand for [a-zA-Z0-9_]. The equivalent to the pattern I suggested would be:

if (/^[\w.%+-]+@[\w.-]+\.[A-Z]{2,}$/i.test(args.Value)) {

Open in new window

0
 

Author Comment

by:badtz7229
Comment Utility
thanks
0
 

Author Comment

by:badtz7229
Comment Utility
@ kaufmed:
the only problem i find with
if (/^[\w.%+-]+@[\w.-]+\.[A-Z]{2,}$/i.test(args.Value)) {

is that this allows for multiple ".", so test...atol@aol.com is ok

whereas
 if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/.test(args.Value)) {
will catch that bc of  [\.-]?
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
For that reason, yes I agree. I was focused on the usage of \w, not the semantics of the overall pattern.
0
 

Author Comment

by:badtz7229
Comment Utility
Thanks again.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

ASP.Net to Oracle Connectivity Recently I had to develop an ASP.NET application connecting to an Oracle database.As I am doing it first time ,I had to solve several problems. This article will help to such developers  to develop an ASP.NET client…
A quick way to get a menu to work on our website, is using the Menu control and assign it to a web.sitemap using SiteMapDataSource. Example of web.sitemap file: (CODE) Sample code to add to the page menu: (CODE) Running the application, we wi…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

728 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

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now