The best answers to the question “What is the difference between substr and substring?” in the category Dev.
What is the difference between
They both seem to output “ab”.
substr (MDN) takes parameters as
substring (MDN) takes parameters as
Update: MDN considers
alert("abc".substr(1,2)); // returns "bc" alert("abc".substring(1,2)); // returns "b"
You can remember
substring (with an i) takes indices, as does yet another string extraction method, slice (with an i).
When starting from 0 you can use either method.
The difference is in the second argument. The second argument to
substring is the index to stop at (but not include), but the second argument to
substr is the maximum length to return.
Another gotcha I recently came across is that in IE 8,
"abcd".substr(-1) erroneously returns
"abcd", whereas Firefox 3.6 returns
"d" as it should.
slice works correctly on both.
More on this topic can be found here.
As hinted at in yatima2975’s answer, there is an additional difference:
substr() accepts a negative starting position as an offset from the end of the string.
substring() does not.
If start is negative, substr() uses it as a character index from the
end of the string.
So to sum up the functional differences:
substring(begin-offset, end-offset-exclusive) where begin-offset is
0 or greater
substr(begin-offset, length) where begin-offset may also be negative