如何知道它是电子邮件还是用户名

时间:2013-04-02 18:05:30

标签: php

大家好我想问一下我的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;
        }
    }

3 个答案:

答案 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 = ?

在哪里?将是电子邮件或用户名值。

相关问题