galvin Posted June 14, 2009 Share Posted June 14, 2009 I got this function online to validate an email address and I'm having trouble. All the code is below but when I actually try to check to see if the function validEmail returns $isValid as true or false, I am getting false always (even when I enter perfectly good email addresses). This is how I am calling the function and checking to see if $isValid is true or false. My guess is that Im doing something stupid here. My form has an email field with name 'email' so that is what I'm checking below obviously. I keep getting "Email address is not valid".... validEmail($_POST['email']); if (!$isValid) { $bademail = "Email Address is not valid"; } else ($isValid) { $bademail = "email is fine"; } This is the actual validEmail function I got online... /** Validate an email address. Provide email address (raw input) Returns true if the email address has the email address format and the domain exists. */ function validEmail($email) { $isValid = true; $atIndex = strrpos($email, "@"); if (is_bool($atIndex) && !$atIndex) { $isValid = false; } else { $domain = substr($email, $atIndex+1); $local = substr($email, 0, $atIndex); $localLen = strlen($local); $domainLen = strlen($domain); if ($localLen < 1 || $localLen > 64) { // local part length exceeded $isValid = false; } else if ($domainLen < 1 || $domainLen > 255) { // domain part length exceeded $isValid = false; } else if ($local[0] == '.' || $local[$localLen-1] == '.') { // local part starts or ends with '.' $isValid = false; } else if (preg_match('/\\.\\./', $local)) { // local part has two consecutive dots $isValid = false; } else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) { // character not valid in domain part $isValid = false; } else if (preg_match('/\\.\\./', $domain)) { // domain part has two consecutive dots $isValid = false; } else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) { // character not valid in local part unless // local part is quoted if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))) { $isValid = false; } } if ($isValid && !(myCheckDNSRR($domain,"MX") || myCheckDNSRR($domain,"A"))) { // domain not found in DNS $isValid = false; } } return $isValid; } function myCheckDNSRR($hostName, $recType = '') { if(!empty($hostName)) { if( $recType == '' ) $recType = "MX"; exec("nslookup -type=$recType $hostName", $result); // check each line to find the one that starts with the host // name. If it exists then the function succeeded. foreach ($result as $line) { if(eregi("^$hostName",$line)) { return true; } } // otherwise there was no mail handler for the domain return false; } return false; } Link to comment https://forums.phpfreaks.com/topic/162087-solved-validating-email-address/ Share on other sites More sharing options...
trq Posted June 14, 2009 Share Posted June 14, 2009 $isValid does not exist outside of the function. Either do.... $isValid = validEmail($_POST['email']); if (!$isValid) { $bademail = "Email Address is not valid"; } else { $bademail = "email is fine"; } echo $bademail; or the more common.... if (validEmail($_POST['email'])) { echo "Email Address is not valid"; } else { echo "email is fine"; } Link to comment https://forums.phpfreaks.com/topic/162087-solved-validating-email-address/#findComment-855502 Share on other sites More sharing options...
galvin Posted July 2, 2009 Author Share Posted July 2, 2009 Awesome, thanks! Link to comment https://forums.phpfreaks.com/topic/162087-solved-validating-email-address/#findComment-867773 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.