主字符串包含由#
分隔的部分我需要检查传入的字符串是否包含任何禁用的密钥。
在实际示例中,密钥由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'
答案 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。