0

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

3 回答 3

0

如果声明如下,您需要移动您的电子邮件。

因为如果输入是一封电子邮件,无论如何它都会匹配第二个预匹配。所以你正在覆盖你的 $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;
        }
    }
于 2013-04-02T18:07:49.300 回答
0

我想你希望你的第二个正则表达式是/[A-Za-z0-9]+/. 您当前正在寻找不包含这些字符的任何内容。

于 2013-04-02T18:10:48.983 回答
0

为什么你关心所有的验证逻辑?我看不到您的实际数据库查询,但似乎您可以轻松地执行以下操作:

SELECT * FROM users
WHERE email = ? OR username = ?

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

于 2013-04-02T18:12:15.257 回答