DEV Community

loading...

TokenReplace - A ColdFusion User-Defined Function

gamesover profile image James Moberg ・2 min read

I've worked with different projects that perform tokenization differently; often it involves using different delimiters. While researching I saw that Drupal (which I don't use) has an official TokenReplace function documented in their API. I thought I'd write something similar since this this doesn't appear to be a function that Adobe ColdFusion currently has.

Usage

Create a string with tokens.

Here are some samples. (I don't personally recommend using HTML brackets, pound signs or parenthesis, but some frameworks use them.)

Hello {name}?  Is this {address}?  I have a special delivery for '{ccName}'.
Hello [name]?  Is this [address]?  I have a special delivery for '[ccName]'.
Hello <name>?  Is this <address>?  I have a special delivery for '<ccName>'.
Hello :name:?  Is this :address:?  I have a special delivery for ':ccName:'.
Hello <<name>>?  Is this <<address>>?  I have a special delivery for '<<ccName>>'.
Hello ::name::?  Is this ::address::?  I have a special delivery for '::ccName::'.
Hello #name#?  Is this #address#?  I have a special delivery for '#ccName#'.
Hello %name%?  Is this %address%?  I have a special delivery for '%ccName%'.
Hello -name-?  Is this -address-?  I have a special delivery for '-ccName-'.

Create a data structure.

(NOTE: The token is not case-sensitive.)

replacementData = {
  "name" = "Bruce Wayne",
  "Address" = "1007 Mountain Drive, Gotham",
  "ccName" = "The Dark Night"
}

Use the UDF

TokenReplace(Text, replacementData, "{", "}")
// Hello Bruce Wayne?  Is this 1007 Mountain Drive, Gotham?  I have a special delivery for 'The Dark Night'.

NOTE: ReEscape may be an Adobe ColdFusion-only function, but BlueDragon supports it too. I'm not sure what the equivalent Lucee function is. (UPDATE: I replaced the ACF built-in function with the REEscape UDF from CFLib.)

TryCF Demo

https://trycf.com/gist/18e4d1662e8417fc824e264b2490dd1b

Source

https://gist.github.com/JamoCA/18e4d1662e8417fc824e264b2490dd1b

Discussion

pic
Editor guide