String Helper: Operazioni sulle stringhe

30 Mar 2019 | M.A.D.R.

Sappiamo tutti quanto è importante avere un String helper nel nostro progettino.

Oggi parliamo appunto di un piccolo file String Helper che come recita il nome, sarà il nostro aiuto sulle operazioni tra stringhe....

Immaginiamo per un momento che la nostra applicazione abbia in un determinato momento bisogno di creare degli alias/slug di semplici titoli, il file ha esattamente questa caratteristica, ossia aiutare lo sviluppatore con poche linee di codice ad effettuare più velocemente il suo lavoro...

Andiamo per gradi e vediamo per bene cosa significa...

Prendiamo come esempio il titolo di questa pagina , possiamo tranquillamente creare lo slug del titolo, ma dobbiamo scrivere e soprattutto analizzare tutte le casistiche per ottimizzare al massimo il nostro script.

Il nostro piccolo file invece ha già tutto quello che server, basta solo richiamare la funzione

slugify('String Helper: Operazioni sulle stringhe")

slugify($text);

In questo modo riceviamo in cambio il nostro slug di navigazione, che è a dir poco fantastico...

Altri metodi nel nostro helper sono:

  • create_string()
  • random_string()
  • sanitize_string()
  • ripeti_stringa()
  • incrementa_stringa()

Vediamo il funzionamento dalla random_string() che chiamerà la nostra create_string(), in primis dobbiamo passare alla random la tipologia di stringa che vogliamo (es: intera,alfabetica,mix) e la lunghezza della stringa finale, quindi il nostro compito si limiterà al semplice richiamo della funzione in questo modo:

//la funzione random string ha esattamente questi parametri
//come default quindi potremmo omettere i parametri
//se e solo se abbiamo bisogno di una stringa lunga 8 caratteri
random_string('alnum',8);

La funzione random_string() si presenta in questo modo

function random_string($type='alnum',$len=8){
		$str='';
		switch ($type){
			case 'alpha':create_string(range('a','z'),$len,$str);
				break;
			case 'alnum':create_string(array_merge(range('A','Z'),range('a','z'),range(0,9)),$len,$str);
				break;
			case 'num':create_string(range(0,9),$len,$str);
				break;
		}
		return $str;
	}

Tutte le funzioni anche se non commentate sono abbastanza facili e genuine da farsi comprendere anche senza la documentazione adeguata!

/**
 * Copyright (c) 2019. Licenza Open Source - public domine
 * Il codice di questo file è reso disponibile secondo le regole vigente e con licenza d'uso PD.
 * Il codice riportato è un programma di cui codice sorgente è reso disponibile completo di tutte le sue
 * funzionalità e può essere modificato secondo le proprie esigenze.
 * Qualora il codice risultasse copiato su altri portali senza citarne la fonte saranno applicate tutte le
 * disposizioni in materia di Proprietà Intellettuale.
 */
/**
 * Created by PhPS.
 * User: macus_adi
 * Project Name: utils_git
 * File: string_helper.php
 * Path: root/helper/string_helper.php
 * Date: 09/02/2019
 * Time: 20:06
 */

if(!function_exists('create_string')){
	function create_string($dt,$len,&$str){
		if(strlen($str)<=$len){
			$str.=$dt[rand(0,count($dt)-1)];
			create_string($dt,$len,$str);
		}
	}
}
if(!function_exists('random_string')){
	function random_string($type='alnum',$len=8){
		$str='';
		switch ($type){
			case 'alpha':create_string(range('a','z'),$len,$str);
				break;
			case 'alnum':create_string(array_merge(range('A','Z'),range('a','z'),range(0,9)),$len,$str);
				break;
			case 'num':create_string(range(0,9),$len,$str);
				break;
		}
		return $str;
	}
}
if(!function_exists('sanitize_string')){
	function sanitize_string($string,$type,$conf=[]){
		$cnf=['int'=>257,'bool'=>258,'float'=>259,'dominio'=>277,'url'=>273,'email'=>274,'ip'=>275,'mac'=>276];
		$cnf = $conf ?? $cnf;
		$m_conf= $cnf[$type]??516;
		return filter_var($string,$m_conf);
	}
}
if(!function_exists('slugify')){
	function slugify($text)
	{
		$text = preg_replace('~[^\pL\d]+~u', '-', $text);
		$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
		$text = preg_replace('~[^-\w]+~', '', $text);
		$text = trim($text, '-');
		$text = preg_replace('~-+~', '-', $text);
		$text = strtolower($text);
		if (empty($text)) {
			return 'n-a';
		}
		return $text;
	}
}
if(!function_exists('ripeti_stringa')){
	function ripeti_stringa($data, $num = 1)
	{
		return ($num > 0) ? str_repeat($data, $num) : '';
	}
}
if(!function_exists('incrementa_stringa')){
	function incrementa_stringa($stringa, $separatore = '_', $inc = 1)
	{
		preg_match('/(.+)'.preg_quote($separatore, '/').'([0-9]+)$/', $stringa, $match);
		return isset($match[2]) ? $match[1].$separatore.($match[2] + 1) : $stringa.$separatore.$inc;
	}
}

Soluzioni complete per ogni esigenza