大家好我想问一下我的html表单问题,需要输入你可以输入的用户名/电子邮件。 然后它按用户名或电子邮件搜索,如果在数据库中该帐户存在,如果是,则进 该脚本有效,但仅限电子邮件。
我的问题是如何在输入字段中识别用户是否写了用户名或电子邮件?现在它检查两者,但由于某种原因它不会检测只有电子邮件键入的用户名。
function getUserEmailExist( $input )
{
global $database;
if( preg_match( '/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i', $input ) ) {
$type = 2;
$get = $database->checkExistRecovery( $input, $type );
}
if( preg_match( '/[^0-9A-Za-z]/', $input ) ) {
$type = 1;
$get = $database->checkExistRecovery( $input, $type );
}
if( $get ) {
$this->updateRecover( $input, $type );
} else {
return false;
}
}
答案 0 :(得分:0)
如果以下声明,您需要移动电子邮件。
因为如果输入是电子邮件,那么无论如何它都会匹配第二个preg匹配。 所以你要覆盖你的$ type变量。
固定。
function getUserEmailExist( $input )
{
global $database;
if( preg_match( '/[A-Za-z0-9]+/', $input ) ) {
$type = 1;
$get = $database->checkExistRecovery( $input, $type );
}
if( preg_match( '/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i', $input ) ) {
$type = 2;
$get = $database->checkExistRecovery( $input, $type );
}
if( $get ) {
$this->updateRecover( $input, $type );
} else {
return false;
}
}
答案 1 :(得分:0)
我认为您希望第二个正则表达式为/[A-Za-z0-9]+/
。您目前正在寻找任何不包含这些字符的内容。
答案 2 :(得分:0)
为什么你关心所有验证逻辑?我无法看到您的实际数据库查询,但似乎您可以轻松地执行以下操作:
SELECT * FROM users
WHERE email = ? OR username = ?
在哪里?将是电子邮件或用户名值。