VanguardAI/app/Helpers/StringHelper.php
2024-10-27 12:50:51 -06:00

305 lines
6.7 KiB
PHP

<?php
namespace App\Helpers;
class StringHelper
{
private $string;
public function __construct(?string $string = "")
{
$this->string = $string;
}
/**
* Establece el string a manipular
*/
public function setString(string $string): self
{
$this->string = $string;
return $this;
}
/**
* Obtiene el string actual
*/
public function getString(): string
{
return $this->string;
}
/**
* Convierte el string a mayúsculas
*/
public function toUpper(): self
{
$this->string = mb_strtoupper($this->string);
return $this;
}
/**
* Convierte el string a minúsculas
*/
public function toLower(): self
{
$this->string = mb_strtolower($this->string);
return $this;
}
/**
* Capitaliza la primera letra
*/
public function capitalize(): self
{
$this->string = ucfirst($this->string);
return $this;
}
/**
* Capitaliza cada palabra
*/
public function capitalizeWords(): self
{
$this->string = ucwords($this->string);
return $this;
}
/**
* Elimina espacios en blanco al inicio y final
*/
public function trim(): self
{
$this->string = trim($this->string);
return $this;
}
/**
* Remueve caracteres especiales y acentos
*/
public function removeSpecialChars(): self
{
$unwanted_array = [
"Š" => "S",
"š" => "s",
"Ž" => "Z",
"ž" => "z",
"À" => "A",
"Á" => "A",
"Â" => "A",
"Ã" => "A",
"Ä" => "A",
"Å" => "A",
"Æ" => "A",
"Ç" => "C",
"È" => "E",
"É" => "E",
"Ê" => "E",
"Ë" => "E",
"Ì" => "I",
"Í" => "I",
"Î" => "I",
"Ï" => "I",
"Ñ" => "N",
"Ò" => "O",
"Ó" => "O",
"Ô" => "O",
"Õ" => "O",
"Ö" => "O",
"Ø" => "O",
"Ù" => "U",
"Ú" => "U",
"Û" => "U",
"Ü" => "U",
"Ý" => "Y",
"Þ" => "B",
"ß" => "ss",
"à" => "a",
"á" => "a",
"â" => "a",
"ã" => "a",
"ä" => "a",
"å" => "a",
"æ" => "a",
"ç" => "c",
"è" => "e",
"é" => "e",
"ê" => "e",
"ë" => "e",
"ì" => "i",
"í" => "i",
"î" => "i",
"ï" => "i",
"ð" => "o",
"ñ" => "n",
"ò" => "o",
"ó" => "o",
"ô" => "o",
"õ" => "o",
"ö" => "o",
"ø" => "o",
"ù" => "u",
"ú" => "u",
"û" => "u",
"ý" => "y",
"ý" => "y",
"þ" => "b",
"ÿ" => "y",
];
$this->string = strtr($this->string, $unwanted_array);
return $this;
}
/**
* Genera un slug a partir del string
*/
public function slug(): self
{
$this->removeSpecialChars();
$this->string = strtolower(
trim(preg_replace("/[^A-Za-z0-9-]+/", "-", $this->string))
);
return $this;
}
/**
* Trunca el string a una longitud específica
*/
public function truncate(int $length, string $append = "..."): self
{
if (strlen($this->string) > $length) {
$this->string = substr($this->string, 0, $length) . $append;
}
return $this;
}
/**
* Cuenta las palabras en el string
*/
public function wordCount(): int
{
return str_word_count($this->string);
}
/**
* Revierte el string
*/
public function reverse(): self
{
$this->string = strrev($this->string);
return $this;
}
/**
* Reemplaza todas las ocurrencias de un string por otro
*/
public function replace(string $search, string $replace): self
{
$this->string = str_replace($search, $replace, $this->string);
return $this;
}
/**
* Extrae una substring
*/
public function substring(int $start, ?int $length = null): self
{
$this->string = substr($this->string, $start, $length);
return $this;
}
/**
* Convierte el string a camelCase
*/
public function toCamelCase(): self
{
$this->string = lcfirst(
str_replace(
" ",
"",
ucwords(str_replace(["_", "-"], " ", $this->string))
)
);
return $this;
}
/**
* Convierte el string a snake_case
*/
public function toSnakeCase(): self
{
$this->string = strtolower(
preg_replace(
["/([a-z\d])([A-Z])/", "/([^_])([A-Z][a-z])/"],
'$1_$2',
$this->string
)
);
return $this;
}
/**
* Verifica si el string contiene una substring
*/
public function contains(string $needle): bool
{
return strpos($this->string, $needle) !== false;
}
/**
* Verifica si el string empieza con una substring
*/
public function startsWith(string $needle): bool
{
return strpos($this->string, $needle) === 0;
}
/**
* Verifica si el string termina con una substring
*/
public function endsWith(string $needle): bool
{
return substr($this->string, -strlen($needle)) === $needle;
}
/**
* Limpia el string de HTML y PHP tags
*/
public function stripTags(): self
{
$this->string = strip_tags($this->string);
return $this;
}
/**
* Convierte caracteres especiales a entidades HTML
*/
public function htmlEntities(): self
{
$this->string = htmlentities($this->string, ENT_QUOTES, "UTF-8");
return $this;
}
/**
* Genera un hash MD5 del string
*/
public function toMd5(): self
{
$this->string = md5($this->string);
return $this;
}
/**
* Genera un string aleatorio
*/
public function random(int $length = 10): self
{
$characters =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$this->string = "";
for ($i = 0; $i < $length; $i++) {
$this->string .= $characters[rand(0, strlen($characters) - 1)];
}
return $this;
}
}