JavaScriptové ekvivalenty PHP funkcí

 |  HTML, CSS, JavaScript  |  5 330x
JavaScript: Chytré funkce - ekvivalenty k PHP funkcím

Při studiu a práci s JavaScriptem jsem mnohokrát narazil na situace, kdy mi standardní JavaScriptové funkce nestačily. Řešení v PHP by bylo triviální, ovšem v JavaScriptu dané funkce prostě chyběly. Trochu jsem hledal a narazil na zajímavý projekt phpjs.org, kde jsem objevil rozsáhlou knihovnu PHP funkcí přepsaných do JS. Samozřejmě mi nedalo se o ně nepodělit.

Funkce strip_tags

Odstranění HTML tagů ze stringu není úplně triviální operace. Následující funkce nám zajistí, že se problémem nebudeme muset zabývat.

/**
 * ekvivalent k php strip_tags
 * @param string html
 * @return string  
 **/
function strip_tags(html){
	if (arguments.length < 3) {
		html = html.replace(/<\/?(?!\!)[^>]*>/gi, '');
	} else {
		allowed = arguments[1];
		specified = eval("["+arguments[2]+"]");
		if (allowed) {
			regex='<!--?(?!(' + specified.join('|') + '))\b[^-->]*>';
			html = html.replace(new RegExp(regex, 'gi'), '');
		} else {
			regex = '<!--?(' + specified.join('|') + ')\b[^-->]*>';
			html=html.replace(new RegExp(regex, 'gi'), '');
		}
	}
	return html;
}

Funkce array_key_exists

V PHP lze v některých případech nahradit za isset(), ovšem v JavaScriptu už je nutné použít operaci. Funkce array_key_exists nám to přecijen trochu zpříjemní.

/**
 * ekvivalent k php array_key_exists
 * @param string key
 * @param array | object item
 * @return bool   
 **/
function array_key_exists(key, value) {
	return value[key] !== undefined ? true : false;
}

Funkce in_array

Výskyt hodnoty v poli si můžeme usnadnit redeklarací funkce in_array. V JavaScriptu nám bude navíc fungovat i se statickými objekty. Třetí argument chybí, ovšem abych se přiznal, vůbec mě to netrápí.

/**
 * ekvivalent k PHP in_array (bez tretiho parametru)
 * @param string needle
 * @param array haystack      
 **/
function in_array(needle, haystack) {  
	for (i in haystack) {
		if (needle == haystack[i]) {
			return true;
		}
	}
	return false;  
}

Funkce trim

Validace formulářů je poměrně často prováděná operace. U textových polí rozhodně nechceme, aby například mezera prošla kontrolou jako neprázdný řetězec. Za tím účelem využijeme právě trim. Používám zjednodušené řešení bez implementace druhého argumentu.

/**
 * ekvivalent k PHP trim (bez druheho parametru) zdroj: jquery 
 * @param string arg
 * @return arg
 **/
function trim(arg) {
	return (arg || '').replace( /^\s+|\s+$/g, '');
}

htmlspecialchars

Další chytrá funkce, kterou JavaScript postrádá je htmlspecialchars.

function htmlspecialchars (string, quote_style, charset, double_encode) {
    var optTemp = 0, i = 0, noquotes= false;
    if (typeof quote_style === 'undefined' || quote_style === null) {
        quote_style = 2;
    }
    string = string.toString();
    if (double_encode !== false) {
        string = string.replace(/&/g, '&');
    }
    string = string.replace(//g, '>');
 
    var OPTS = {
        'ENT_NOQUOTES': 0,
        'ENT_HTML_QUOTE_SINGLE' : 1,
        'ENT_HTML_QUOTE_DOUBLE' : 2,
        'ENT_COMPAT': 2,
        'ENT_QUOTES': 3,
        'ENT_IGNORE' : 4
    };
    if (quote_style === 0) {
        noquotes = true;
    }
    if (typeof quote_style !== 'number') {
        quote_style = [].concat(quote_style);
        for (i=0; i < quote_style.length; i++) {
            if (OPTS[quote_style[i]] === 0) {
                noquotes = true;
            } else if (OPTS[quote_style[i]]) {
                optTemp = optTemp | OPTS[quote_style[i]];
            }
        }
        quote_style = optTemp;
    }
    if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
        string = string.replace(/'/g, ''');
    }
    if (!noquotes) {
        string = string.replace(/"/g, '"');
    }
 
    return string;
}

htmlspecialchars('<a href="test">Test</a>', 'ENT_QUOTES');
htmlspecialchars('ab"c\'d', ['ENT_NOQUOTES', 'ENT_QUOTES']);

Práce s cookies

Jak je v PHP práce s cookies jednoduchá, v JS je to peklo. Kdysi dávno jsem si proto vyhledal řešení, které pokud mi nezemřelo, tak funguje šťastně až dodnes :o) Půjde o dvě funkce, jednu na nastavení a druhou na získání cookie. Jejich použití je jasně patrné z argumentů.

/**
 * vrati cookie dle name
 * @param string Name
 **/
function getCookie(Name) {
	replace = new RegExp(Name + "=[^;]+", "i");
	if (document.cookie.match(replace)) {
		return document.cookie.match(replace)[0].split("=")[1]
	}
	return null;
}

/**
 * nastavi cookie
 * @param string name
 * @param string value
 **/
function setCookie(name, value) {
	expires = new Date();
	expires_str = expires.setDate(expires.getDate()+parseInt(365));
	document.cookie = name + "=" + value + "; expires=" + expires.toGMTString() + "; path=/";
}
Facebook Twitter Google+

Přidat komentář







Nevím, kolik to je
Parak simati, Muballit mitte, Nergal allatu mellamu mesaru, La tapallah Annuaki, Kettu Puluthu qillatua