CFLib.org - потрясающая коллекция пользовательских функций.
Существует UDF, который делает именно то, что вы хотите: SubStr
Он имитирует поведение php "substr", объединяя среднюю, левую и правую функциональность в одну функцию и добавляя некоторую дополнительную функциональность и хитрость.Например: - substr ("abcdef", -2) - то же, что right ("abcdef", 2), - substr ("abcdef", 1, 3) - то же, что left ("abcdef", 3),- substr ("abcdef", 2, 4) совпадает с mid ("abcdef", 2, 4). В то же время он допускает такие вещи, как - substr ("abcdef", 2) вместо mid ("abcdef")., 2, len ("abcdef") - 2) - substr ("abcdef", -2, 1), чтобы сказать "начни 2 символа до конца строки и возьми 1 символ".- substr ("abcdef", -4, -1), чтобы сказать "начинай 4 символа до конца строки и выбрасывай последний символ".Возвращает пустую строку в случае несовместимых индексов.
Вот источник:
<cfscript>
/**
* Returns the substring of a string. It mimics the behaviour of the homonymous php function so it permits negative indexes too.
*
* @param buf The string to parse. (Required)
* @param start The start position index. If negative, counts from the right side. (Required)
* @param length Number of characters to return. If not passed, returns from start to end (if positive start value). (Optional)
* @return Returns a string.
* @author Rudi Roselli Pettazzi (rhodion@tiscalinet.it)
* @version 2, July 2, 2002
*/
function SubStr(buf, start) {
// third argument (optional)
var length = 0;
var sz = 0;
sz = len(buf);
if (arrayLen(arguments) EQ 2) {
if (start GT 0) {
length = sz;
} else if (start LT 0) {
length = sz + start;
start = 1;
}
} else {
length = Arguments[3];
if (start GT 0) {
if (length LT 0) length = 1+sz+length-start;
} else if (start LT 0) {
if (length LT 0) length = length-start;
start = 1+sz+start;
}
}
if (isNumeric(start) AND isNumeric(length) AND start GT 0 AND length GT 0) return mid(buf, start, length);
else return "";
}
</cfscript>