// safe string manipulation functions // ** does not require PCRE // startswith( "string", "search" ) // // returns true if "string" begins with "search" function script startswith { return substr(getarg(0), 0, getstrlen(getarg(1)) - 1) == getarg(1); } // endswith( "string", "search" ) // // returns true if "string" ends with "search" function script endswith { .@t = getstrlen(getarg(0)); // total length .@n = getstrlen(getarg(1)); // substring length return substr(getarg(0), .@t - .@n, .@t - 1) == getarg(1); } // capitalize( "string" ) // // returns "string" with its first letter capitalized function script capitalize { .@original$ = charat(getarg(0), 0); return setchar(getarg(0), strtoupper(.@original$), 0); } // titlecase( "string" [, "delimiter" [, camel]] ) // // returns "string" with the first letter of each word capitalized // if camel is true, the string is joined in a camelCase fashion function script titlecase { .@delimiter$ = getarg(1, " "); .@c = getarg(2, 0); explode(.@words$, getarg(0), .@delimiter$); for (.@i = (.@c ? 1 : 0); .@i < 255; ++.@i) { if (.@words$[.@i] == "") { break; } .@original$ = charat(.@words$[.@i], 0); .@words$[.@i] = setchar(.@words$[.@i], strtoupper(.@original$), 0); } return implode(.@words$, (.@c ? "" : .@delimiter$)); } // zfill( "string" [, width [, "padding"]] ) // // returns "string" padded to the left with "padding" up to width function script zfill { .@str$ = getarg(0); .@width = getarg(1, 8); .@padding$ = getarg(2, "0"); for (.@s = getstrlen(.@str$); .@s < .@width; ++.@s) { .@str$ = .@padding$ + .@str$; } return .@str$; }