Thomas Bruederli
2015-03-03 c32998084d6d7995e7ef9a100a842b492f32b6f9
Add untility function to match strings ignoring word order
1 files modified
24 ■■■■■ changed files
program/lib/Roundcube/rcube_utils.php 24 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_utils.php
@@ -917,7 +917,7 @@
     */
    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) {
@@ -985,6 +985,28 @@
    }
    /**
     * 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
     *
     * @param array $aliases Argument alias names