代码之家  ›  专栏  ›  技术社区  ›  Daniel Earwicker

如何在javascript/html中实现自动大写

  •  2
  • Daniel Earwicker  · 技术社区  · 16 年前

    作为用户类型,我需要在ASPX页面上的Telerik RadEditor控件内实现自动大写。

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

    我目前捕获每一个击键(向下/向上)作为用户类型,以支持一个称为“宏”的单独功能,它本质上是扩展到格式化文本中的简短关键字。也就是说,宏“so”可以在点击空格键后自动展开为“stackoverflow”。

    也就是说,我可以访问密钥代码信息,我使用textRange方法来选择一个单词(“so”),并将其扩展为“stackOverflow”。因此,我有一些上下文的外观。

    但是,我需要检查这个上下文以了解是否应该自动大写。不管是否涉及宏,这也需要工作。

    既然我在监视宏的击键,我应该只监视标点符号(它不仅仅是表示大写字母的句点)并自动覆盖下一个键入的字母,还是应该使用textrange并分析上下文?

    4 回复  |  直到 12 年前
        1
  •  4
  •   Andrew Hedges    16 年前

    我不确定这是否是你想做的,但这里有一个函数( 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
  •  4
  •   OJ.    16 年前

    你试过应用 text-transform 控件的CSS样式?

        3
  •  2
  •   Dewi Morgan    12 年前

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

    我真的不会这么做,除非你觉得你可以写一个脚本来正确地设置下一句中的大小写,如果你先把它转换成小写,然后把它传给脚本。

    让-卢克“国王”奥布赖恩·马森里·范德格拉夫(博士,OBE)和他的朋友麦金托什和麦金托什一起离开了麦金托什。耶稣在美国电话电报公司的圣乔治街的“艾滋换艾滋”演唱会上演唱了他的阿塔里圣歌,而范·海伦在范·亨利的货车上演唱了《暴风雨》。

    通过尝试创建一个自然语言解析器,您已经为失败做好了准备。你永远不能像用户那样做。充其量,你可以做一个近似值,当你出错时给用户编辑和强制修正的能力。但在这种情况下,编辑工作往往比一开始就直接手工完成更多。

    这就是说,如果你有足够的空间和能力来存储和搜索一个大的n-gram语料库中的适当大写的单词,那么你至少可以在最可能需要的情况下进行疯狂的尝试。

        4
  •  0
  •   micahwittman    16 年前

    你提出了一个有趣的问题。对每一次按键进行操作可能会更具限制性,因为您不知道给定的键代码之后会立即发生什么(撤销一个错误的反应的复杂性可能意味着无论如何都必须转到基于文本范围的例程)。当然,到目前为止,我还没有和代码在这个问题上纠结,所以这是我头脑中的一个假设。

    在任何长度,这里有一个标题外壳功能(Java实现灵感来自John Gruber博客自动化),这可能会刺激在处理实际套管代码时的想法:

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