functies startsWith() en endsWith() in PHP

Hoe kan ik twee functies schrijven die een tekenreeks nemen en teruggeven of die begint met het opgegeven teken/de opgegeven tekenreeks of ermee eindigt?

Bijvoorbeeld:

$str = '|apples}';

echo startsWith($str, '|'); //Returns true
echo endsWith($str, '}'); //Returns true
Oplossing
function startsWith($haystack, $needle)
{
     $length = strlen($needle);
     return (substr($haystack, 0, $length) === $needle);
}

function endsWith($haystack, $needle)
{
    $length = strlen($needle);
    if ($length == 0) {
        return true;
    }

    return (substr($haystack, -$length) === $needle);
}

Gebruik dit als je'geen regex wilt gebruiken.

Commentaren (31)

Alle antwoorden tot nu toe lijken veel onnodig werk te doen, strlen berekeningen, string toewijzingen (substr), enz. De 'strpos' en 'stripos' functies geven de index terug van het eerste voorkomen van $needle in $haystack:

function startsWith($haystack,$needle,$case=true)
{
    if ($case)
        return strpos($haystack, $needle, 0) === 0;

    return stripos($haystack, $needle, 0) === 0;
}

function endsWith($haystack,$needle,$case=true)
{
    $expectedPosition = strlen($haystack) - strlen($needle);

    if ($case)
        return strrpos($haystack, $needle, 0) === $expectedPosition;

    return strripos($haystack, $needle, 0) === $expectedPosition;
}
Commentaren (15)
function startsWith($haystack, $needle, $case = true) {
    if ($case) {
        return (strcmp(substr($haystack, 0, strlen($needle)), $needle) === 0);
    }
    return (strcasecmp(substr($haystack, 0, strlen($needle)), $needle) === 0);
}

function endsWith($haystack, $needle, $case = true) {
    if ($case) {
        return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0);
    }
    return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0);
}

Credit To:

Controleer of een string eindigt op een andere string

Controleer of een string begint met een andere string

Commentaren (3)