Πώς μπορώ να γράψω δύο συναρτήσεις που θα παίρνουν μια συμβολοσειρά και θα επιστρέφουν αν αρχίζει με τον καθορισμένο χαρακτήρα/συμβολοσειρά ή αν τελειώνει με αυτήν;
Για παράδειγμα:
$str = '|apples}';
echo startsWith($str, '|'); //Returns true
echo endsWith($str, '}'); //Returns true
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);
}
Χρησιμοποιήστε αυτό αν δεν θέλετε να χρησιμοποιήσετε ένα regex.
Όλες οι απαντήσεις μέχρι στιγμής φαίνεται να κάνουν ένα σωρό περιττές εργασίες, υπολογισμούς strlen
, κατανομές συμβολοσειρών (substr)
, κλπ. Οι συναρτήσεις 'strpos'
και 'stripos'
επιστρέφουν το δείκτη της πρώτης εμφάνισης του $needle
στο $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;
}
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);
}
Πίστωση σε:
Έλεγχος αν μια συμβολοσειρά τελειώνει με μια άλλη συμβολοσειρά
Έλεγχος αν μια συμβολοσειρά αρχίζει με μια άλλη συμβολοσειρά