Add untility function to match strings ignoring word order

pull/229/merge
Thomas Bruederli 9 years ago
parent 36ee2c8427
commit c32998084d

@ -917,7 +917,7 @@ class rcube_utils
*/
public static function tokenize_string($str, $minlen = 2)
{
$expr = array('/[\s;\/+-]+/ui', '/(\d)[-.\s]+(\d)/u');
$expr = array('/[\s;,"\'\/+-]+/ui', '/(\d)[-.\s]+(\d)/u');
$repl = array(' ', '\\1\\2');
if ($minlen > 1) {
@ -984,6 +984,28 @@ class rcube_utils
return $as_array ? $arr : join(" ", $arr);
}
/**
* Compare two strings for matching words (order not relevant)
*
* @param string Haystack
* @param string Needle
* @return boolen True if match, False otherwise
*/
public static function words_match($haystack, $needle)
{
$a_needle = self::tokenize_string($needle, 1);
$haystack = join(" ", self::tokenize_string($haystack, 1));
$hits = 0;
foreach ($a_needle as $w) {
if (stripos($haystack, $w) !== false) {
$hits++;
}
}
return $hits >= count($a_needle);
}
/**
* Parse commandline arguments into a hash array
*

Loading…
Cancel
Save