<meta charset="utf-8"><?php
// 条件1:第一个字符必须是英文或数字或下划线 用哪个字符串函数?
// 条件2:必须包含一个@ 字符串函数是?
// 条件3:包含一个以上 . 符
// 条件4:@符在.符前
// 条件5:不能以@或.符结尾
// 条件6:长度不能长于30 这个知道 用mb_strlen
function is_ok_email($email)
{
$s = substr($email,0,1);//载取第一个字符
$x = ord($s);//第一个字符转为ASCII码
//查ASCII码表得知:
//小写英文的ASCII码范围是97-122
//大写英文的ASCII码范围是65-90
//0-9数字的ASCII码范围是48-57
//下划线的ASCII码是95
//因此可以用下面的条件判断
if
(
($x > 96 && $x < 123) ||
($x > 64 && $x < 91 ) ||
($x > 47 && $x < 58 ) ||
$x == 95
)
{//过了第一关
$x1 = strpos($email,'@');
if($x1)
{//过了第二关
$x2 = strpos($email,'.');
if($x2)
{//过了第三关
if($x2 > $x1)
{//过了第四关
$s = substr($email,strlen($email)-1,1);//载取最后一字符
if($s != '.' && $s != '@')
{//过了第五关
if(strlen($email)< 30)
{//过了第六关
return true;
}
}
}
}
}
}
return false;
}$test[] = '测试[email protected]';
$test[] = 'qqqqq.com';
$test[] = 'qqqqqcom';
$test[] = 'qqqqq.@com';
$test[] = 'qqqqq.@com@';
$test[] = 'qqqqq.@com@.';
$test[] = '[email protected].';
$test[] = '[email protected]';
$test[] = '[email protected]';foreach($test as $v)
{
echo $v;
if(is_ok_email($v))
{
echo '是正确的email';
}else
{
echo '不是正确的email';
}
echo '<br>';
}
function is_email_string($s)
{
if (!is_string($s) || (($len = strlen($s)) < 3))
{
return false;
}
if($len > 30) {
return false;
} $lb = $len - 1;
$state = 0;
$dot_count = [0, 0]; for ($i = 0; $i < $len; $i++)
{
$c = $s[$i];
if ($c == '.')
{
if ($i == 0 || $i == $lb)
{
return false;
}
$dot_count[$state]++;
}
elseif ($c == '@')
{
if ($state != 0 || $i == 0 || $i == $lb)
{
return false;
}
$state = 1;
continue;
}
} if ($dot_count[0] > 0 || $dot_count[1] < 1)
{
return false; // 按楼主要求,.出现在@前或没有.出现在@后就算错误
} return true;
}$x = '12@163com';
var_dump(is_email_string($x));
{
if (!is_string($s) || (($len = strlen($s)) < 3) || $len > 30)
{
return false;
} $lb = $len - 1;
$state = 0;
$dot_count = [0, 0]; for ($i = 0; $i < $len; $i++)
{
$c = $s[$i];
if ($c == '.')
{
if ($i == 0 || $i == $lb)
{
return false;
}
$dot_count[$state]++;
}
elseif ($c == '@')
{
if ($state != 0 || $i == 0 || $i == $lb)
{
return false;
}
$state = 1;
continue;
}
elseif (!($c == '_' || ($c >= 'a' && $c <= 'z') || ($c >= 'A' && $c <= 'Z') || ($c >= '0' && $c <= '9')))
{
return false;
}
} if ($dot_count[0] > 0 || $dot_count[1] < 1)
{
return false;
} return true;
}$x = '[email protected]';
var_dump(is_email_string($x));
if($email{0} == '_' || ($email{0} >= '0' && $email{0} <=9) || (strtoupper($email{0}) >= 'A' || strtoupper($email{0}) <= 'Z')条件2:必须包含一个@ 字符串函数是?
if(substr_count($email, '@') == 1)条件3:包含一个以上 . 符
if(substr_count($email, '.') >= 1)条件4:@符在.符前
if(strpos($email, '@') < strpos($emai, '.'))条件5:不能以@或.符结尾
if(substr($email, -1) != '@' && substr($email, -1) != '.')条件6:长度不能长于30 这个知道 用mb_strlen
if(strlen($eamil) <= 30)
如果一定要用各种函数,像explode('@', $email),得到的数组长度是二说明必只有一个@,再简单判断两个元素的内容,就可以达到目的。