note 98744 deleted from function.preg-match by danbrown
| From: | danbrown@php.net | Date: | Mon, 05 Jul 2010 13:30:24 +0000 |
| Subject: | note 98744 deleted from function.preg-match by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-170705@lists.php.net to get a copy of this message | ||
Note Submitter: norrismp at gmail dot com
----
Check for a valid username and email address. Robust reporting to report exactly what is wrong.
<?php
function is_user($username) {
//only numbers and letters in username
if(preg_match("[^A-Za-z0-9]",$username)) {
die("Bad username [code1]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
//username looks good
return $username;
}
function is_email( $email, $check_dns = false ) {
// Test for the minimum length the email can be
if ( strlen( $email ) < 3 ) {
die("Bad email [code1]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
// Test for an @ character after the first position
if ( strpos( $email, '@', 1 ) === false ) {
die("Bad email [code2]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
// Split out the local and domain parts
list( $local, $domain ) = explode( '@', $email, 2 );
// LOCAL PART
// Test for invalid characters
if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
die("Bad email [code3]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
// DOMAIN PART
// Test for sequences of periods
if ( preg_match( '/\.{2,}/', $domain ) ) {
die("Bad email [code4]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
// Test for leading and trailing periods and whitespace
if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
die("Bad email [code5]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
// Split the domain into subs
$subs = explode( '.', $domain );
// Assume the domain will have at least two subs
if ( 2 > count( $subs ) ) {
die("Bad email [code6]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
// Loop through each sub
foreach ( $subs as $sub ) {
// Test for leading and trailing hyphens and whitespace
if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
die("Bad email [code7]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
// Test for invalid characters
if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
die("Bad email [code8]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
}
// DNS
// Check the domain has a valid MX and A resource record
if ( $check_dns && function_exists( 'checkdnsrr' ) && !( checkdnsrr(
$domain . '.', 'MX' ) || checkdnsrr( $domain . '.', 'A' ) )
) {
die("Bad email [code9]. Your IP address has been logged. Please contact support if you are
getting this in error.");
}
// Congratulations your email made it!
return $email;
}
?>