我需要在用户输入时在ASPX页面上的Telerik RadEditor控件内实现自动大写。
这可以是IE特定的解决方案(IE6 +)。
我目前捕获每个键击(向下/向上),因为用户键入以支持称为“宏”的单独功能,这些功能本质上是简短的关键字,可扩展为格式化文本。即,当按空格键“stackoverflow”时宏“so”可以自动扩展。
也就是说,我可以访问keyCode信息,我也使用TextRange方法选择一个单词(“so”)并将其扩展为“stackoverflow”。因此,我有一些相关的背景。
但是,我需要检查这个上下文,以了解我是否应该自动大写。无论是否涉及宏,这都需要工作。
由于我正在监视宏的击键,我是否应该监视标点符号(它不仅仅是表示大写字母的周期)并自动限制输入的下一个字母,还是应该使用TextRange并分析上下文? / p>
答案 0 :(得分:4)
您是否尝试将text-transform CSS样式应用于控件?
答案 1 :(得分:4)
我不确定这是否是你要做的,但这里有一个函数(reference)将给定的字符串转换为标题大小写:
function toTitleCase(str) {
return str.replace(/([\w&`'‘’"“.@:\/\{\(\[<>_]+-? *)/g, function(match, p1, index, title){ // ' fix syntax highlighting
if (index > 0 && title.charAt(index - 2) != ":" &&
match.search(/^(a(nd?|s|t)?|b(ut|y)|en|for|i[fn]|o[fnr]|t(he|o)|vs?\.?|via)[ -]/i) > -1)
return match.toLowerCase();
if (title.substring(index - 1, index + 1).search(/['"_{([]/) > -1)
return match.charAt(0) + match.charAt(1).toUpperCase() + match.substr(2);
if (match.substr(1).search(/[A-Z]+|&|[\w]+[._][\w]+/) > -1 ||
title.substring(index - 1, index + 1).search(/[\])}]/) > -1)
return match;
return match.charAt(0).toUpperCase() + match.substr(1);
});
}
答案 2 :(得分:2)
有时,不这样做是编码问题的正确答案。
我真的不会这样做,除非你觉得你可以编写一个脚本来在下面的句子中正确设置案例,如果你要先将它转换为小写并将其传递给脚本。
Jean-Luc“The King”O'Brien MacHenry van d'Graaf IIV(博士,OBE)与他的朋友MacIntosh和麦克唐纳一起离开麦克唐纳。耶稣在AT&amp; T的“艾滋病艾滋病”演出中将他的Atari ST送到St George's st,Van Halen在范亨利的面包车上表演The Tempest。你试图创建一个自然语言解析器,让自己陷入堕落。你永远不能像用户那样做。充其量,您可以进行近似,并让用户能够在出错时编辑并强制进行更正。但是在这种情况下,编辑通常不仅仅是手动和正确地进行编辑。
也就是说,如果你有足够的空间和力量来存储和搜索大量n-gram语料库,那么你至少可以在最可能的情况下进行疯狂的搜查。
答案 3 :(得分:0)
你提出了一个有趣的问题。按下每个按键可能会更加有限,因为您不会知道在给定的键码之后会立即发生什么(撤消反应的复杂性可能意味着必须转到基于TextRange的例程)。当然,到目前为止,我还没有解决过这个问题的代码,所以这是我脑海中的一个假设。
在任何时候,这里都是一个Title Casing函数(受John Gruber博客自动化启发的Java实现),这可能会激发处理实际套管代码的想法: