2016-03-11 2 views
0

Я использую приведенный ниже код кода для проверки уникального имени пользователя.Подтвердить уникальное имя пользователя, используя PHP preg_grep

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», «а», логическое сохранил возвращаемое значение bool(true).

Мое намерение состоит в том, чтобы текст, найденный в массиве, возвратил значение $valid в значение false и распечатал ошибку.

Извинения за мой плохой английский и мои основные знания языка программирования PHP.

+0

Считаете ли вы использование in_array()? – ryantxr

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

Спасибо за объяснение о preg_grep ryantxr, Теперь я больше понимаю об этом; однако я пытался отлаживать count ($ preg) == 0 и казаться каждый раз, когда он подсчитывает int (0). Я не уверен, что есть, чтобы вернуть истину, ложь. –

+0

Когда я его запустил, я получил правду, ложно, ложно, как и ожидалось. – ryantxr

+0

yey ........... вы правы, ryantxr. Ты спас меня. Я потратил много времени на это. Очень ценю за вашу помощь. –

Смежные вопросы