PHP检查两个字符串是否有共同的部分?

时间:2011-08-09 07:27:05

标签: php string

主字符串包含由#

分隔的部分

我需要检查传入的字符串是否包含任何禁用的密钥。

在实际示例中,密钥由md5($ var)生成,每个密钥长度为32个字符。 $ banned_keys和$ incoming_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 个答案:

答案 0 :(得分:3)

$banned_array = explode('#', $banned_keys);
$incoming_array = explode('#', $incoming_keys);

// compute intersection of two sets
if( array_intersect($banned_array, $incoming_array) )
 ...

答案 1 :(得分:0)

尝试使用explode('#',$string)将字符串转换为数组,用于传入和禁止的键,然后使用in_array()进行检查。

例如

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

可能有更好的方法,但这应该有效:)

答案 2 :(得分:0)

你可以'爆炸'将字符串转换为数组,然后匹配数组条目(如果交集包含任何条目,则至少提供一个禁用键):

$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
}

答案 3 :(得分:0)

请尝试以下操作:

$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

答案 4 :(得分:0)

试试看这里:

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。