From c32998084d6d7995e7ef9a100a842b492f32b6f9 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Tue, 3 Mar 2015 14:54:36 +0100 Subject: Add untility function to match strings ignoring word order --- program/lib/Roundcube/rcube_utils.php | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'program/lib/Roundcube') diff --git a/program/lib/Roundcube/rcube_utils.php b/program/lib/Roundcube/rcube_utils.php index f4c0e90ca..0ca2a9e31 100644 --- a/program/lib/Roundcube/rcube_utils.php +++ b/program/lib/Roundcube/rcube_utils.php @@ -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 * -- cgit v1.2.3