PHP проверяет, есть ли у двух строк общие части? - PullRequest
0 голосов
/ 09 августа 2011

Основная строка содержит части, разделенные #

Мне нужно проверить, содержит ли входящая строка какие-либо из запрещенных ключей.

В реальном примере ключи создаются с помощью md5 ($ var), каждый ключ длиной 32 символа. Количество ключей является переменным как в $ banned_keys, так и в $ Input_keys1

$banned_keys =  'abc1#abc2#abc3#abc4';

$incoming_keys1='asd1#asd2#asd3#asd4'; //should pass no banned key found
$incoming_keys2='asd1#asd2#asd3#abc3'; //Should fail, contains banned key 'abc3'

Ответы [ 5 ]

3 голосов
/ 09 августа 2011
$banned_array = explode('#', $banned_keys);
$incoming_array = explode('#', $incoming_keys);

// compute intersection of two sets
if( array_intersect($banned_array, $incoming_array) )
 ...
0 голосов
/ 09 августа 2011

Попробуйте посмотреть здесь:

http://www.webcheatsheet.com/php/regular_expressions.php#match

и для Регулярного выражения ..

http://www.w3schools.com/jsref/jsref_obj_regexp.asp

Я все еще новичок виспользуя регулярное выражение ..

Я полагаю, что для вашей задачи шаблон будет ...

/abc1|abc2|abc3|abc4/g

тогда значение может быть ..

<?php
$subject = "asd1#asd2#asd3#asd4";
$pattern = '/abc1|abc2|abc3|abc4/g';
if (preg_match($pattern, $subject, $matches)) {
echo "Match was found <br />";
echo $matches[0];
}
?>

Функция preg_match () возвращает 1, если совпадение найдено, и 0 в противном случае.

0 голосов
/ 09 августа 2011

Попробуйте следующее:

$banned_keys_array = explode("#", $banned_keys);
$incoming_keys_arr = explode("$", $incoming_keys);

$is_valid_key = true;
foreach($incoming_keys_arr as $key) {
  if (in_array($key, $banned_keys_array) {
     // Invalid key found;
     $is_valid_key = false;
     break;
  }
}

// check $is_valid_key here
0 голосов
/ 09 августа 2011

Вы можете «взорвать» строки, чтобы преобразовать их в массивы, а затем сопоставить записи массива (если пересечение содержит какие-либо записи, предоставляется как минимум один запрещенный ключ):

$banned_keys_ary = explode('#', $banned_keys);
$incoming_keys_ary = explode('#', $incoming_keys);
if (count(array_intersect($incoming_keys_ary, $banned_keys_ary)) > 0)
{
  // fail, at least one banned key found
}
else
{
  // pass, no banned keys found
}
0 голосов
/ 09 августа 2011

Попробуйте преобразовать строки в массивы, используя explode('#',$string) для входящих и заблокированных ключей, затем используйте in_array () для проверки.

Например

$banned = explode('#','abc1#abc2#abc3#abc4');
$incoming = explode('#','asd1#asd2#asd3#asd4');
if(in_array($banned,$incoming)){
 //fail
}

Возможно, есть лучший способ, но это должно сработать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...