我需要在用户输入时在ASPX页面上的Telerik RadEditor控件内实现自动大写。

这可以是IE特定的解决方案(IE6 +)。

我目前捕获每个按键(向下/向上),因为用户键入以支持称为“宏”的单独功能。这些本质上是短的关键字,扩展为格式化的文本。即宏“是”在按空格键到“stackoverflow”时可以自动扩展。

也就是说,我可以访问keyCode信息,我也使用TextRange方法选择一个单词(“so”)并将其扩展为“stackoverflow”。因此,我有一些相关的背景。

但是,我需要检查一下这个上下文,知道我是否应该自动大写。无论是否涉及宏,这都需要工作。

由于我正在监视宏的击键,我是否应该监视标点符号(它不仅仅是表示大写字母的周期)并自动限制输入的下一个字母,还是应该使用TextRange并分析上下文? / p>

有帮助吗?

解决方案

我不确定这是不是你想要做的,但这是一个函数( 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);
    });
}

其他提示

您是否尝试过应用文本转换控件的CSS样式?

有时,不这样做是编码问题的正确答案。

我真的不会这样做,除非你觉得你可以编写一个脚本来在下面的句子中正确设置案例,如果你要先将它转换为小写并将其传递给脚本。

Jean-Luc“国王” O'Brien MacHenry van d'Graaf IIV(博士,OBE)与他的朋友MacIntosh和麦克唐纳一起离开麦克唐纳的Macintosh。耶稣在AT&amp; T的“艾滋病艾滋病”中给了他的Atari ST。在圣乔治街的演出中,Van Halen在van Henry的面包车上表演The Tempest。

你试图创建一个自然语言解析器,让自己陷入堕落。你永远不能像用户那样做。充其量,您可以进行近似,并让用户能够在出错时编辑并强制进行更正。但是在这种情况下,编辑通常不仅仅是手动和正确地进行编辑。

也就是说,如果你有足够的空间和力量来存储和搜索大量n-gram语料库,那么你至少可以在最可能的情况下进行疯狂的搜查。

你提出了一个有趣的问题。按下每个按键可能会更加有限,因为您不会知道在给定的键码之后会立即发生什么(撤消反应的复杂性可能意味着必须转到基于TextRange的例程)。当然,到目前为止,我还没有解决过这个问题的代码,所以这是我脑海中的一个假设。

在任何时候,这里都是一个Title Casing函数(受John Gruber博客自动化启发的Java实现),这可能会激发处理实际套管代码的想法:

  

http://individed.com/code/to-title-case/

scroll top