我使用以下代码块来验证唯一用户名。
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));
无论我输入什么"test","abc","a",布尔值都保持返回值bool(true)
。
我的目的是当在数组中找到文本时,它会将$valid
的值返回为 false 并打印出错误。
为我的英语不好和PHP编程语言的基本知识道歉。
如果找不到
结果,preg_grep不会返回 -1。if 返回它找到的内容的数组。您可以在下面的示例中看到输出。
请注意,我在某种程度上重写了您的函数。
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";