# src/string.js

    /**
     * String utilities
     */

    export default {

        lower(text){
            return text.toLowerCase();
        },

        upper(text){
            return text.toUpperCase();
        },

        trim(text){
            if (text.trim){
                return text.trim();
            }
            return text.replace(/^\s*|\s*$/g, '');
        },

        isEmpty(text){
            return this.trim(text) === '';
        },

        rgxEsc(text){
            let chars = /[-\/\\^$*+?.()|[\]{}]/g;
            let escMatch = '\\$&';
            return String(text).replace(chars, escMatch);
        },

        matchCase(text, caseSensitive){
            if(!caseSensitive){
                return this.lower(text);
            }
            return text;
        },

        /**
         * Checks if passed data contains the searched term
         * @param  {String} term           Searched term
         * @param  {String} data           Data string
         * @param  {Boolean} exactMatch    Exact match
         * @param  {Boolean} caseSensitive Case sensitive
         * @return {Boolean}
         */
        contains(term, data, exactMatch=false, caseSensitive=false){
            // Improved by Cedric Wartel (cwl) automatic exact match for selects and
            // special characters are now filtered
            let regexp,
                modifier = caseSensitive ? 'g' : 'gi';
            if(exactMatch){
                regexp = new RegExp(
                    '(^\\s*)'+ this.rgxEsc(term) +'(\\s*$)', modifier);
            } else {
                regexp = new RegExp(this.rgxEsc(term), modifier);
            }
            return regexp.test(data);
        }

    };