【问题标题】:Validate Unique username using PHP preg_grep使用 PHP preg_grep 验证唯一用户名
【发布时间】:2016-06-26 05:15:54
【问题描述】:

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

 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->value 中通过了“测试”。当我做var_dump(validateRepositoryUnique($field, $list, &$valid));时,布尔值一直显示bool(true)

无论我输入什么“test”、“abc”、“a”,布尔值都保持返回值bool(true)

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

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

【问题讨论】:

  • 你考虑过使用 in_array() 吗?
  • 我没有尝试过,但似乎无法验证我想要的区分大小写和正确格式。

标签: php validation


【解决方案1】:

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";

【讨论】:

  • 感谢您对 preg_grep ryantxr 的解释,我现在对此更加了解;但是,我尝试调试 count($preg) == 0 并且每次都将其计数为 int(0)。我不确定是否有距离返回true,false。
  • 当我运行它时,我得到了预期的真、假、假。
  • 是的............你是对的,ryantxr。你救了我。我在这上面花了很多时间。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-07-09
  • 2017-11-02
  • 2018-04-13
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 2012-12-27
相关资源
最近更新 更多