TalkPHP

TalkPHP (http://www.talkphp.com/forums.php)
-   Script Giveaway (http://www.talkphp.com/script-giveaway/)
-   -   Simple Email Validation (http://www.talkphp.com/script-giveaway/2303-simple-email-validation.html)

Gareth 02-21-2008 02:16 AM

Simple Email Validation
 
Hey,

This might seem really noobish, but I wanted to create a simple, but effective email validation function.

Most other functions/classes were too complicated: they did things which I did not need and were way above me. My aim was to make sure that the email a user entered basically was an email.

I would love suggestions on how I could improve it, as I am sure there are improvements to be made!

PHP Code:

function checkEmail($email) {
    if(
eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"$email)) {
        return 
true;
          }else{
        return 
false;
        }


uses as such:

PHP Code:

$email "gwp123@gwp123.com";

    if (
checkEmail($email)){
         echo 
'its valid!';         
     } else {
        echo 
'its not valid :(';
    } 

This would echo out "its valid!".

Gareth

Wildhoney 02-21-2008 02:32 AM

I think we had a discussion similar to this before, and the conclusion was that we as programmers should not be using any advanced regex to check the syntax of an email address. After all, email validation would weed out any invalid emails, and then a crontab would come along and clear out any inactive accounts.

However, we should definitely by using a simple regex for checking the very simple structure of any given email address. Such as like:

Code:

^.+?@.+?\..+$
This will prevent people from clearly not entering a valid email address - often by mistake.

Furthermore, being as sure as possible that an email address is valid would be somewhat slow, and that is surely not a favourable sacrifice. After all, email address structures can be very complicated.

Salathe 02-21-2008 02:50 AM

A good first thing to do would be to switch from using eregi to preg_match (with the i modifier). This will improve the running time of the function to around a quarter of that of eregi! Also, this is a person preference more than anything, I don't like to see functions where a conditional is processed which determines a boolean response which is assigned to a local variable. Why not just use a single line of code? return (bool) preg_match(...);

For the regular expression itself, you've made an ok start. However, this falls victim of a hugely common bug in many "validation" checks: it would flag salathe+spam@talkphp.com as invalid, when it's not. You simply need to allow the + character in the appropriate place.

Since you're only checking to see if the pattern matches or not, there's no need to use capturing groups (...) so you can same some time and effort (on the parser's part) by making them non-capturing (?:...).

Gareth 02-21-2008 01:23 PM

Thanks for the input guys! You rock :P

I'm going to look up on preg_match, I don't use it that often so I'll need to remind myself of the syntax and uses etc.

But for now I've updated the function with returning the bools straight off.


All times are GMT. The time now is 12:24 AM.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0