CFML Left and Right Functions can Accept Negative Counts
By Pete Freitag
Here is a handy trick I saw in some code recently. It turns out you can use a negative integer in the count
argument of the left()
and right()
functions in CFML. This works in multiple versions of both Lucee and Adobe ColdFusion!
Here's an example:
left("Peter", -1)
This will trim 1
character off the end of the string. The result of the above code would be:
Pete
I would normally write that as:
left(name, len(name)-1)
The thing to be aware of with the above approach is that if the length of the string is 1, then it would effectively be like calling left(name, 0)
, which does not result in an empty string, it results in an exception. Suppose I'm writing code to trim off a trailing slash, you might write it like this:
if (right(path, 1) == "/") { if (len(path) == 1) { path = ""; } else { path = left(path, len(path)-1); } }
Or using the negative count you could write it like this:
if (right(path, 1) == "/") { path = left(path, -1); }
Trimming Prefixes With Right
Now suppose you wanted to trim the prefix off a string, you can use the right function with a negative integer to do this:
right("https://example.com", -8)
This will trim off the first 8 characters, or https://
and return just:
example.com
Gotcha's
If you do end up using this feature there are a few things to beware of. First this feature is documented in Lucee's docs, it says:
A negative value of n will return (length - n) characters from the beginning of the string.
However Adobe's docs for these functions state that the count argument should be a positive integer. So it is possible though unlikely that it could change to throw an exception in the future.
Second if you pass in a negative value longer than the string length you will see some potentially unexpected results.
CFML Left and Right Functions can Accept Negative Counts was first published on September 09, 2020.
If you like reading about cfml, or coldfusion then you might also like:
- Left and Right Accept Negative Counts
- URL Safe Base64 Encoding / Decoding in CFML
- Using Hashicorp Vault with ColdFusion
- Dumping HTTP Servlet Request Attributes and Parameters in CF
The FuseGuard Web Application Firewall for ColdFusion & CFML is a high performance, customizable engine that blocks various attacks against your ColdFusion applications.