Solved

ASP: need regexp for various email formats

Posted on 2014-04-25
17
370 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 33

Expert Comment

by:Big Monty
ID: 40023516
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 75

Expert Comment

by:käµfm³d 👽
ID: 40023523
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
ID: 40023524
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
Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

 

Author Comment

by:badtz7229
ID: 40023552
@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 75

Expert Comment

by:käµfm³d 👽
ID: 40023569
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
ID: 40023624
@kaufmed- that still didn't work. not even simple email addresses are accepted.
0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 40023642
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 75

Accepted Solution

by:
käµfm³d   👽 earned 500 total points
ID: 40023654
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
 

Author Closing Comment

by:badtz7229
ID: 40023670
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 75

Expert Comment

by:käµfm³d 👽
ID: 40023737
^               - 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
ID: 40023861
Thank u for explanation
0
 

Author Comment

by:badtz7229
ID: 40027423
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 75

Expert Comment

by:käµfm³d 👽
ID: 40027440
\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
ID: 40027993
thanks
0
 

Author Comment

by:badtz7229
ID: 40028025
@ 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 75

Expert Comment

by:käµfm³d 👽
ID: 40028129
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
ID: 40028320
Thanks again.
0

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

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

Suggested Solutions

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

775 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