Edit report at https://bugs.php.net/bug.php?id=50434&edit=1
ID: 50434
Comment by: olafvdspek at gmail dot com
Reported by: mail at daniel-faber dot de
Summary: add string functions str_startswith and str_endswith
for convenience
Status: Analyzed
Type: Feature/Change Request
Package: Strings related
PHP Version: 5.2.11
Block user comment: N
Private report: N
New Comment:
Please?
http://stackoverflow.com/questions/834303/php-startswith-and-endswith-functions
Requests for these functions come up again and again.
Case insensitive variants might be useful too.
Previous Comments:
------------------------------------------------------------------------
[2012-08-20 21:01:08] ajf at ajf dot me
I would also like to see this. It's very handy for string checking. Both Python
and C# have such a method. (accompanied by Python's in, it's very handy) For
brevity I'd prefer startswith() and endswith(), however.
I think I'll write a patch :)
------------------------------------------------------------------------
[2009-12-10 13:19:38] mail at daniel-faber dot de
Possible problems with the above corner cases are not the main reasons why I
requested these functions. Even if I know this corner cases will not occur in
my application I'll prefer str_startswith($s, $p) to substr($s, 0, strlen($p))
== $p because it's shorter and easier to read.
This functionality is so often needed and when you need it, you have do use the
substr expression or define you own str_startswith function. So why not adding
it to the PHP core since it's such a basic thing...
------------------------------------------------------------------------
[2009-12-10 00:58:48] mail at daniel-faber dot de
rasmus, this is right in nearly all cases, but here are some corner cases where
your code fails:
startswith('', '0')
should be false, but your code gives true
reason: substr('', 0, 1) is false
false == '0' is true
if you try to fix this by replacing == with ===, another corner case will fail:
startswith('', '')
should be true, but will be false
reason: substr('', 0, 0) is false
false === '' is false
this seems to work in all cases:
function str_startswith($string, $prefix) {
if (strlen($string) < strlen($prefix))
return false;
return substr($string, 0, strlen($prefix)) == $prefix;
}
similar for endswith:
endswith('', '0') should be false, but is true
endswith('test', '') should be true, but is false
this seems to work in all cases:
function str_endswith($string, $suffix) {
$suffixLength = strlen($suffix);
if ($suffixLength == 0)
return true;
if (strlen($string) < $suffixLength)
return false;
return substr($string, -$suffixLength) == $suffix;
}
------------------------------------------------------------------------
[2009-12-09 23:48:49] [email protected]
Isn't it super trivial given the way substr works in PHP?
startswith:
substr($haystack,0,strlen($prefix)) == $prefix
endswith:
substr($haystack,-strlen($suffix)) == $suffix
Usually we add things to core that can't be done with a single trivial
call in PHP. The only thing you save is the strlen call, and you can
hardcode that to avoid it.
------------------------------------------------------------------------
[2009-12-09 23:39:58] mail at daniel-faber dot de
Description:
------------
Please add these two string functions for convenience:
boolean str_startswith($string, $prefix)
// true if $string starts with $prefix, false otherwise
boolean str_endswith($string, $suffix)
// true if $string ends with $suffix, false otherwise
Of course one can easily write these functions in PHP, but having them in the
PHP core would be nice. You find them in other languages too:
Java: string.startsWith(prefix) and string.endsWith(suffix)
Python: string.startswith(prefix) and string.endswith(suffix)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=50434&edit=1