Object.extend(String, {
interpret: function (value) {
return value == null ? '' : String(value);
},
specialChar: {
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'\\': '\\\\'
}
});
Object.extend(String.prototype, {
trim: function () {
return this.replace(/(^[\s ]*)|([\s ]*$)/g, "");
},
lTrim: function () {
return this.replace(/(^[\s ]*)/g, "");
},
rTrim: function () {
return this.replace(/([\s ]*$)/g, "");
},
bytelength: function () {
var doubleByteChars = this.match(/[^\x00-\xff]/ig);
return this.length + (doubleByteChars == null ? 0 : doubleByteChars.length);
},
cut: function (n) {
if (n > this.length) {
return this;
}
return this.substring(0, n);
},
formatWithWBR: function () {
var args = arguments, size = 10;
if (args.length > 0) {
var argument = parseInt(args[0]);
if (!isNaN(argument) && argument > 0) {
size = argument;
}
}
var text = this, output = [], start = 0, rowStart = 0, nextChar;
for (var i = 1, count = text.length; i < count; i++) {
nextChar = text.charAt(i);
if (/\s/.test(nextChar)) {
rowStart = i;
} else {
if ((i - rowStart) == size) {
output.push(text.substring(start, i));
output.push("<wbr>");
start = rowStart = i;
}
}
}
output.push(text.substr(start));
return output.join("");
},
gsub: function (pattern, replacement) {
var result = '', source = this, match;
replacement = arguments.callee.prepareReplacement(replacement);
while (source.length > 0) {
if (match = source.match(pattern)) {
result += source.slice(0, match.index);
result += String.interpret(replacement(match));
source = source.slice(match.index + match[0].length);
} else {
result += source, source = '';
}
}
return result;
},
sub: function (pattern, replacement, count) {
replacement = this.gsub.prepareReplacement(replacement);
count = count === undefined ? 1 : count;
return this.gsub(pattern, function (match) {
if (--count < 0) return match[0];
return replacement(match);
});
},
scan: function (pattern, iterator) {
this.gsub(pattern, iterator);
return this;
},
truncate: function (length, truncation) {
length = length || 30;
truncation = truncation === undefined ? '...' : truncation;
return this.length > length ?
this.slice(0, length - truncation.length) + truncation : this;
},
strip: function () {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
},
stripTags: function () {
return this.replace(/<\/?[^>]+>/gi, '');
},
stripScripts: function () {
return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
},
extractScripts: function () {
var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
return (this.match(matchAll) || []).map(function (scriptTag) {
return (scriptTag.match(matchOne) || ['', ''])[1];
});
},
evalScripts: function () {
return this.extractScripts().map(function (script) { return eval(script) });
},
escapeHTML: function () {
var self = arguments.callee;
self.text.data = this;
return self.div.innerHTML;
},
unescapeHTML: function () {
var div = document.createElement('div');
div.innerHTML = this.stripTags();
return div.childNodes[0] ? (div.childNodes.length > 1 ?
$A(div.childNodes).inject('', function (memo, node) { return memo + node.nodeValue }) :
div.childNodes[0].nodeValue) : '';
},
toQueryParams: function (separator) {
var match = this.strip().match(/([^?#]*)(#.*)?$/);
if (!match) return {};
return match[1].split(separator || '&').inject({}, function (hash, pair) {
if ((pair = pair.split('='))[0]) {
var key = decodeURIComponent(pair.shift());
var value = pair.length > 1 ? pair.join('=') : pair[0];
if (value != undefined) value = decodeURIComponent(value);
if (key in hash) {
if (hash[key].constructor != Array) hash[key] = [hash[key]];
hash[key].push(value);
}
else hash[key] = value;
}
return hash;
});
},
toArray: function () {
return this.split('');
},
succ: function () {
return this.slice(0, this.length - 1) +
String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
},
times: function (count) {
var result = '';
for (var i = 0; i < count; i++) result += this;
return result;
},
camelize: function () {
var parts = this.split('-'), len = parts.length;
if (len == 1) return parts[0];
var camelized = this.charAt(0) == '-'
? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
: parts[0];
for (var i = 1; i < len; i++)
camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
return camelized;
},
capitalize: function () {
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
},
underscore: function () {
return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/, '#{1}_#{2}').gsub(/([a-z\d])([A-Z])/, '#{1}_#{2}').gsub(/-/, '_').toLowerCase();
},
dasherize: function () {
return this.gsub(/_/, '-');
},
inspect: function (useDoubleQuotes) {
var escapedString = this.gsub(/[\x00-\x1f\\]/, function (match) {
var character = String.specialChar[match[0]];
return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
});
if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
return "'" + escapedString.replace(/'/g, '\\\'') + "'";
},
toJSON: function () {
return this.inspect(true);
},
unfilterJSON: function (filter) {
return this.sub(filter || Prototype.JSONFilter, '#{1}');
},
isJSON: function () {
var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
},
evalJSON: function (sanitize) {
var json = this.unfilterJSON();
try {
if (!sanitize || json.isJSON()) return eval('(' + json + ')');
} catch (e) { }
throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
},
include: function (pattern) {
return this.indexOf(pattern) > -1;
},
startsWith: function (pattern) {
return this.indexOf(pattern) === 0;
},
endsWith: function (pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.lastIndexOf(pattern) === d;
},
empty: function () {
return this.trim() == '';
},
blank: function () {
return /^\s*$/.test(this);
}
});
String.isNullOrEmpty = function (str) {
return str == undefined || str == null || str.empty();
};
String.format = function () {
var args = arguments, argsCount = args.length;
if (argsCount == 0) {
return "";
}
if (argsCount == 1) {
return args[0];
}
var reg = /{(\d+)?}/g, arg, result;
if (args[1] instanceof Array) {
arg = args[1];
result = args[0].replace(reg, function ($0, $1) {
return arg[parseInt($1)];
});
} else {
arg = args;
result = args[0].replace(reg, function ($0, $1) {
return arg[parseInt($1) + 1];
});
}
return result;
};
下载source code