Helpers – String – Manipulaciones de textos
Las páginas están llenos de texto, y muchas veces se tiene que tratar, ya sea convertíendolos, retocando, reemplazando o eliminado parte de su contenido.
Con esta librería podremos realizar todas estas acciones sobre los texto, de las páginas, de los inputs para poder garantizar el texto deseado.
/** * HelperString.php * @author Code Develium */ namespace Helpers; /** * Class HelperString */ abstract class HelpString { /** * Convierte un string a mayúsculas. * Es insensible a lo acéntos. * * @param string $txt * * @return string */ public static function toUpper($txt): string { if (function_exists('mb_strtoupper')) { // Convierte carcateres especiales return ''.mb_strtoupper($txt); } return ''.strtoupper($txt); } /** * Convierte un string a minúsculas. * Es insensible a lo acéntos. * * @param string $txt * * @return string */ public static function toLower($txt): string { if (function_exists('mb_strtolower')) { // Convierte carcateres especiales return ''.mb_strtolower($txt); } return ''.strtolower($txt); } /** * Reemplaza sólo la primera ocurrencia de un string por otro. * Es insensible a mayúsculas i minúsculas pero no a los acentos. * Si no existe la ocurrencia, devuelve el mismo string * * @param string $txt * @param string $origen * @param string $destino * * @return string */ public static function replaceFirst($txt, $origen, $destino) { $origen = '/'.preg_quote(''.$origen, '/').'/i'; return ''.preg_replace($origen, ''.$destino, ''.$txt, 1); } /** * Reemplaza todas las ocurrencias. * Es insensible a mayúsculas y minúsculas pero no a loa acentos * Devuelve el numero de ocurrencias sustiruidas * * @param string $texto * @param string $origen * @param string $destino * @param int|null $numSuccess * * @return string */ public static function replaceAll( $texto, $origen, $destino, &$numSuccess = null): string { return str_ireplace( ''. $origen, ''. $destino, ''. $texto, $numSuccess); } /** * Devuelve la posición de la primera ocurrencia en un texto. * Es indiferente a mayúsculas, minúsculas y acentos * Se puede delimitar donde empezar a buscar. * Devuelve -1 si no existe, siendo 0 la primera posición * * @param $txt * @param $ocurencia * @param int $posInicioBuscar * * @return int */ public static function indexOf( $txt, $ocurencia, $posInicioBuscar = 0): int { $txt = self::eliminarAcentos($txt); $ocurencia = self::eliminarAcentos($ocurencia); $pos = stripos($txt, $ocurencia, $posInicioBuscar); if ($pos === false) { return -1; } return $pos; } /** * Devuelve la posición de la última ocurrencia en un texto. * Es indiferente a mayúsculas y minúsculas pero no a los acentos * Se puede delimitar hasta donde buscar. * Devuelve -1 si no existe, siendo 0 la primera posición * * @param string $txt * @param string $ocurencia * @param int $posFinalBuscar * * @return int */ public static function indexOfLast( $txt, $ocurencia, $posFinalBuscar = 0): int { $pos = strripos($txt, $ocurencia, -1 * $posFinalBuscar); if ($pos === false) { return -1; } return $pos; } /** * Elimina los tabuladores, y salos de línea * * @param string $str * * @return string */ public static function sanitizeTabReturn($str): string { return preg_replace('/[\n\r\t]+/', '', $str); } /** * Elimina los espacios en blanco inncesarios * * @param string $str * * @return string */ public static function sanitizeBlancks($str): string { return trim(preg_replace('/\s{2,}/', ' ', $str)); } /** * Elimina todas las letras con acentos, elimina caracteres no * alfanumericos * puntos o subrayados, cambia el espacio en blanco por un guión * bajo * * @param string $texto * * @return string */ public static function sanitizeAll($texto): string { /* Elimina accentos, ñ y ç */ $texto = strtolower(strtr($texto, 'ÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛÇÑáéíóúàèìòùäëïöüâêîôûçñ ', 'aeiouaeiouaeiouaeioucnaeiouaeiouaeiouaeioucn_')); /* Elimina cualquier carácter no alfanumerico, punto o guión bajo */ return preg_replace( '/[^[:alnum:]._]/ui', '', strtoupper(trim($texto))); } /** * Devuelve la parte de la derecha despues de un texto delimitador * que se busca desde la izquierda. * No devuelve el delimitador * * @param $texto * @param $delimitador * * @return string */ public static function getRightStringBack($texto, $delimitador) { $pos = stripos($texto, $delimitador); $ret = ''; if (false !== $pos) { /* Busca el delimitador partiendo de la izquierda y si lo encuentra devuelve la parde de la la derecha */ $ret = substr($texto, ($pos + strlen($delimitador))); if ($ret === false) { return ''; } } return $ret; } /** * Devuevle la parte de la derecha después de un delimitador * Busca el delimitador empezando desde la derecha * * @param $txt * @param $delimitador * * @return string */ public static function getRightString($txt, $delimitador): string { $ret = ''; $pos = stripos($txt, $delimitador); if ($pos !== false) { $ret = substr( $txt, $pos + strlen($delimitador), strlen($txt)); if ($ret === false) { return ''; } } return $ret; } /** * Devuelve los N caractarede de la derecha. * Empieza a contar desde la derecha * * @param $str * @param $len * * @return string */ public static function getRightNum($str, $len): string { $len_str = strlen($str); if ($len > $len_str) { $ret = $str; } else { $ret = substr($str, $len_str - $len); if (false === $ret) { return ''; } } return $ret; } /** * Devuelve los N caracteres después de un delimitador * * @param $txt * @param $delimitador * @param $len * * @return string */ public static function getMiddleString( $txt, $delimitador, $len): string { $ret = ''; if (stripos($txt, $delimitador) !== false) { $pi = stripos($txt, $delimitador) + strlen($delimitador); $ret = substr($txt, $pi, $len); if ($ret === false) { return ''; } } return $ret; } /** * Devuelve los N caracteres después de una posición determinada * empezando por la izquierda * * @param $txt * @param $posIni * @param $len * * @return string */ public static function getMiddleNum($txt, $posIni, $len): string { $ret = substr($txt, $posIni, $len); if ($ret === false) { return ''; } return $ret; } /** * Devuelve la parte de la izquierda hasta un texto delimitador * * @param $texto * @param $delimitador * * @return string */ public static function getLeftString($texto, $delimitador): string { $pos = stripos($texto, $delimitador); $ret = ''; if (false !== $pos) { $ret = substr($texto, 0, $pos); if ($ret === false) { return ''; } } return $ret; } /** * Empezando a contar desde la izquierda, devuelve la parte de la * derecha * despres de una longitud determinada * * @param $texto * @param $len * * @return string */ public static function getRightNumBack($texto, $len): string { /* Empezando por la izquierda, devuelve la parte derecha */ $ret = substr($texto, $len); if (false === $ret) { return ''; } return $ret; } /** * Devuelve el texto de la izquierda de una determinada longitud. * Empieza a contar por la izquierda. * Si no se puede obtener, devuelve un string vacío * * @param $texto * @param $len * * @return string */ public static function getLeftNum($texto, $len): string { /* Empezando por la izquierda, devuelve la perte de la izquierda */ $ret = substr(''.$texto, 0, $len); if (false === $ret) { return ''; } return $ret; } /** * Devuelve el último carácter de un string * * @param string $txt * * @return false|string */ public static function getLastChar($txt): string { if (HelpValidate::isEmpty($txt)) { return ''; } return ''.substr(''.$txt, -1); } /** * Devuelve el texto delimitado entre otros dos textos. * Es case insensitive. * Devuelve null si lo encuentra. * '' => No hay caracteres entre los delimitadores * * @param $txt * @param $strIni * @param $strFin * * @return string */ public static function getBetween($txt, $strIni, $strFin): string { $ret = null; if (stripos($txt, $strIni) !== false) { $pi = stripos($txt, $strIni) + strlen($strIni); $lon = stripos($txt, $strFin) - $pi; $ret = substr($txt, $pi, $lon); if (false === $ret) { return ''; } } return $ret; } /** * Rellena un texto por la derecha hasta un número determinado * mediante un caraácter * * @param $txt * @param $size * @param $charPad * * @return string */ public static function fillRight($txt, $size, $charPad = '') { return str_pad($txt, $size, $charPad, STR_PAD_RIGHT); } /** * Rellena un texto por la izquierda hasta un número determinado * mediante un caraácter * * @param $txt * @param $size * @param $charPad * * @return string * @since 20/09/2020 */ public static function fillLeft($txt, $size, $charPad = '') { return str_pad($txt, $size, $charPad, STR_PAD_LEFT); } /** * Elimian los acentos de un texto * * @param $cadena * * @return string */ public static function eliminarAcentos($cadena): string { return strtr(trim(''.$cadena), array( 'á' => 'a', 'é' => 'e', 'í' => 'i', 'ó' => 'o', 'ú' => 'u', 'à' => 'a', 'è' => 'e', 'ì' => 'i', 'ò' => 'o', 'ù' => 'u', 'Á' => 'A', 'É' => 'E', 'Í' => 'I', 'Ó' => 'O', 'Ú' => 'U', 'À' => 'A', 'È' => 'E', 'Ì' => 'I', 'Ò' => 'O', 'Ù' => 'U', 'ä' => 'a', 'ë' => 'e', 'ï' => 'i', 'ö' => 'o', 'ü' => 'u', 'Ä' => 'A', 'Ë' => 'E', 'Ï' => 'I', 'Ö' => 'O', 'Ü' => 'U', 'â' => 'a', 'ê' => 'e', 'î' => 'i', 'ô' => 'o', 'û' => 'u', 'Â' => 'A', 'Ê' => 'E', 'Î' => 'I', 'Ô' => 'O', 'Û' => 'U' )); } /** * Devuelve un numero aleatorio entre un mínimo y un máximo. * * @param $min * @param $max * * @return int */ public static function createRandomRange($min, $max): string { return ''.mt_rand($min, $max); } /** * Genera un número aleatorio de N digitos de longitud. * * @param int $numDigitos * * @return string */ public static function createRandom($numDigitos = 6): string { $random = ''; for ($n = $numDigitos; $n > 0; $n--) { $generado = ''.mt_rand(); $posicion = mt_rand(1, strlen($generado) - 1); $random .= $generado[ $posicion ]; } return strval($random); } /** * Genera una clave aleatoria de 10 carcarteres. * Letras y números. * @return string */ public static function createKey(): string { return ''.substr(md5(uniqid()), 0, 10); } /** * Devuevle un GUID válido. * @return string */ public static function createGUID(): string { $microTime = microtime(); list($arrDec, $arrSec) = explode(" ", $microTime); $decHex = dechex($arrDec * 1000000); $secHex = dechex($arrSec); self::guidSetLen($decHex, 5); self::guidSetLen($secHex, 6); $guid = ''; $guid .= $decHex; $guid .= self::guidCrearSeccion(3); $guid .= '-'; $guid .= self::guidCrearSeccion(4); $guid .= '-'; $guid .= self::guidCrearSeccion(4); $guid .= '-'; $guid .= self::guidCrearSeccion(4); $guid .= '-'; $guid .= $secHex; $guid .= self::guidCrearSeccion(6); return $guid; } /** * Asignar longitud * * @param $string * @param $length */ private static function guidSetLen(&$string, $length) { $strlen = strlen($string); if ($strlen < $length) { $string = str_pad($string, $length, '0'); } else { if ($strlen > $length) { $string = substr($string, 0, $length); } } } /** * Crear sección * * @param $len * * @return string */ private static function guidCrearSeccion($len) { $ret = ""; for ($i = 0; $i < $len; $i++) { $ret .= dechex(mt_rand(0, 15)); } return $ret; } /** * Separa un texto en un número de caracteres por líniea * Por defecto inserta al final de cada linea \n. * Ex: "The quick brown fox jumped over the lazy dog." * The quick brown fox<br /> * jumped over the lazy<br /> * dog. * * @param string $texto * @param int $len * @param string $break * * @return string */ public static function wordWrap($texto, $len, $break = ''): string { if (empty($break)) { return wordwrap($texto, $len); } else { return wordwrap($texto, $len, $break); } } /** * Trunca un string a un número determinado de caracteres. * No recorta añade un string al final. * * @param $txt * @param $len * @param string $fill * * @return string */ public static function truncate($txt, $len, $fill = '...'): string { if (HelpValidate::isEmpty($txt)) { return ''; } if (strlen($txt) > $len) { return ''.substr($txt, 0, $len).$fill; } return $txt; } /** * Elimina los tags html de un texto. * Se puede indicar que tags no ha de eliminar * * @param string $txt * @param string|null $tagsNoEliminar * * @return string */ public static function removeHtmlTags( $txt, $tagsNoEliminar = null) { return strip_tags($txt, $tagsNoEliminar); } }