* $str = new Text('Hello World!');
* $str->at(6); // W
*
* $str = new Text('いちりんしゃ');
* $str->at(4) // し
*
*
* @param int $index zero-related index
*
* @return string the found character
*/
public function at(int $index): string {
return mb_substr($this->getString(), $index, 1, $this->encoding);
}
/**
* Returns an ArrayObject consisting of the characters in the string.
*
* @return ArrayObject An ArrayObject of all chars
*/
public function chars(): ArrayObject {
return new ArrayObject(mb_str_split($this->getString(), 1, $this->encoding));
}
/**
* Returns the index of a given string, starting at the optional zero-related offset
*
* @param string|Stringable $string
* @param int $offset zero-related offset
*
* @return int|null int for the index or null if the given string doesn't occur
*/
public function indexOf(string|Stringable $string, int $offset = 0): ?int {
$output = mb_strpos($this->getString(), (string) $string, $offset, $this->encoding);
return false === $output ? null : $output;
}
/**
* Returns the last index of a given string, starting at the optional offset
*
* @param string|Stringable $string $string
* @param int|null $offset
*
* @return int|null int for the index or null if the given string doesn't occur
*/
public function lastIndexOf(string|Stringable $string, ?int $offset = null): ?int {
if (null === $offset) {
$offset = $this->length();
}
// Converts $offset to a negative offset as strrpos has a different
// behavior for positive offsets.
$output = mb_strrpos($this->getString(), (string) $string, $offset - $this->length(), $this->encoding);
return false === $output ? null : $output;
}
/**
* Checks whether the string starts with the given string. Case sensitive!
*
* @param string|Stringable $substring The substring to look for
*
* @return bool
*
* @see Text::startsWithIgnoreCase()
*
*/
public function startsWith(string|Stringable $substring): bool {
return str_starts_with($this->getString(), (string) $substring);
}
/**
* Checks whether the string starts with the given string. Ignores case.
*
* @param string|Stringable $substring The substring to look for
*
* @return bool
*
* @see Text::startsWith()
*
*/
public function startsWithIgnoreCase(string|Stringable $substring): bool {
return str_starts_with($this->toUpperCase()->getString(), mb_strtoupper((string) $substring, $this->encoding));
}
/**
* Checks whether the string ends with the given string. Case sensitive!
*
* @param string|Stringable $substring The substring to look for
*
* @return bool
*
* @see Text::endsWithIgnoreCase()
*
*/
public function endsWith(string|Stringable $substring): bool {
return str_ends_with($this->getString(), (string) $substring);
}
/**
* Checks whether the string ends with the given string. Ingores case.
*
* @param string|Stringable $substring The substring to look for
*
* @return bool
*
* @see Text::endsWith()
*
*/
public function endsWithIgnoreCase(string|Stringable $substring): bool {
return str_ends_with($this->toUpperCase()->getString(), mb_strtoupper((string) $substring, $this->encoding));
}
/**
* Checks whether the given string occurs
*
* @param string|Stringable $text
*
* @return bool
*/
public function contains(Stringable|string $text): bool {
return str_contains($this->getString(), (string) $text);
}
/**
* Performs a regular expression matching with the given regexp
*
* @param string $regexp
*
* @return bool
*/
public function match(string $regexp): bool {
return (bool) preg_match($regexp, $this->getString());
}
}