2008-09-20 71 views
2

我需要在用戶鍵入ASPX頁面的Telerik RadEditor控件時實現自動大寫。您將如何實現JavaScript/HTML中的自動大寫操作

這可以是IE特定的解決方案(IE6 +)。

我當前捕獲每個按鍵(向下/向上),因爲用戶鍵入的是支持稱爲「宏」的單獨功能,這些功能實質上是擴展爲格式化文本的簡短關鍵字。即宏「so」可以在按空格鍵時自動擴展爲「stackoverflow」。

這就是說,我有權訪問keyCode信息,以及我使用TextRange方法選擇一個單詞(「so」)並將其展開爲「stackoverflow」。因此,我有一些上下文。

但是,我需要檢查此上下文以瞭解我是否應該自動大寫。無論是否涉及宏,這也需要工作。我是否應該只監視標點符號(它不僅僅是指示大寫字母的時間段)並且自動設置下一個字母的類型,還是應該使用TextRange和分析上下文?

+1

除了在句首之前,何時需要大寫?你有預定義的專有名詞或首字母縮略詞列表嗎? – Liam 2008-09-20 08:13:31

回答

4

我不知道這是否是你想要做什麼,但這裏是一個函數(reference)給定的字符串轉換爲標題情況:

function toTitleCase(str) { 
    return str.replace(/([\w&`'‘’"“[email protected]:\/\{\(\[<>_]+-? *)/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); 
    }); 
} 
0

您提出一個有趣的問題。對每個按鍵進行操作可能會受到更多的限制,因爲您不知道在給定的鍵碼之後會立即發生什麼(取消原來不正確的反應的複雜性可能意味着必須轉到基於TextRange的例程)。誠然,迄今爲止我還沒有在這個問題上與代碼糾纏過,所以這是我腦海中的一個假設。

在任何長度,這裏有一個標題套管功能(由約翰·格魯伯博客自動化啓發Java實現),當它涉及到處理實際的外殼代碼可能會刺激思路:

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

1

有時候,不要這樣做是編碼問題的正確答案。

我真的不會這樣做,除非您覺得您可以在下面的句子中編寫腳本來正確設置案例,如果您首先將其轉換爲小寫並將其傳遞到腳本中。

Jean-Luc「國王」O'Brien MacHenry van Graaf IIV(博士,OBE)與他的朋友MacIntosh和MacDonald一起在麥克唐納的麥金塔離開了他的Macintosh。耶穌給了他的Atari ST AT & T的「艾滋病艾滋病」在聖喬治街演出,Van Halen在範亨利的麪包車上演出The Tempest。

你試圖創建一個自然語言解析器,爲自己設定了一個秋天。你永遠無法像用戶那樣做。充其量,您可以做一個近似值,並讓用戶能夠在出錯時編輯並強制更正。但通常在這種情況下,編輯比單純手動進行編輯更有效。也就是說,如果你有空間和能力來存儲和搜索一個大的n元語料庫的大寫字母,你至少可以在最可能期望的情況下進行瘋狂的刺探。