使用PHP preg_grep验证唯一用户名

时间:2016-03-11 04:15:57

标签: php validation

我使用下面的代码块来验证唯一用户名。

 function validateRepositoryUnique($field, $list, &$valid) {
    if ( preg_grep('/^'.preg_quote($field->value).'$/i', $list) == -1) {
       $valid = false;
       $field->valid = false;
       $field->error = '"' . $field->value . '" already exists.';
       return false;
    }
    return true;
}

实施例。

$filed->value = "test";
$list = array('test','test1','Test');

但是我通过了测试"在$ filed->值。当我执行bool(true)

时,布尔值保持显示值var_dump(validateRepositoryUnique($field, $list, &$valid));

无论我输入了什么"测试"," abc"," a",布尔值保持返回值bool(true)

我的意图是在数组中找到文本时,它会将$valid的值返回false并打印出错误。

为我糟糕的英语和PHP编程语言的基本知识道歉。

1 个答案:

答案 0 :(得分:0)

如果找不到结果,

preg_grep不会返回-1。如果返回它找到的数组。您可以在下面的示例中看到输出。

请注意,我有点重写了你的功能。

function validateRepositoryUnique($field, $list, &$valid) {
    $preg = preg_grep('/^'.preg_quote($field->value).'$/i', $list) ;

    var_dump($preg);
    echo "\n";

    if ( count($preg) == 0 ) {
        $valid = false;
        $field->valid = false;
        $field->error = '"' . $field->value . '" already exists.';
        return false;
    }
    return true;
}

$v;
$list = ['square', 'round', 'long'];
$f1 = new stdclass;

$f1->value = 'round';
$result = validateRepositoryUnique($f1, $list, $v);
var_dump($result);
echo "\n";

$f1->value = 'grass';
$result = validateRepositoryUnique($f1, $list, $v);
var_dump($result);
echo "\n";

$f1->value = 'triangle';
$result = validateRepositoryUnique($f1, $list, $v);
var_dump($result);
echo "\n";