2008-09-20 7 views
2

J'ai besoin de mettre en œuvre la capitalisation automatique à l'intérieur d'un contrôle Telerik RadEditor sur une page ASPX en tant que types d'utilisateurs.Comment implémenteriez-vous la capitalisation automatique en JavaScript/HTML

Cela peut être une solution spécifique IE (IE6 +).

Actuellement, je capture chaque frappe (bas/haut) que l'utilisateur tape pour prendre en charge une fonctionnalité distincte appelée "macros" qui sont essentiellement des mots-clés courts qui se développent en texte formaté. c'est-à-dire que la macro "so" pourrait se développer automatiquement en tapant la barre d'espace sur "stackoverflow". Cela dit, j'ai accès aux informations keyCode, ainsi j'utilise les méthodes TextRange pour sélectionner un mot ("so") et l'étendre à "stackoverflow". Ainsi, j'ai un semblant de contexte.

Cependant, j'ai besoin de vérifier ce contexte pour savoir si je devrais capitaliser automatiquement. Cela doit également fonctionner indépendamment du fait qu'une macro soit impliquée. Étant donné que je surveille les séquences de touches pour les macros, devrais-je simplement surveiller la ponctuation (plus que des points qui signalent une lettre majuscule) et masquer automatiquement la lettre suivante? Dois-je utiliser TextRange et analyser le contexte?

+1

Autre que le début d'une phrase, quand faut-il capitaliser? Avez-vous une liste prédéfinie de noms propres ou d'acronymes? – Liam

Répondre

4

Je ne suis pas sûr que ce soit ce que vous essayez de faire, mais ici est une fonction (reference) pour convertir une chaîne donnée en cas de titre:

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); 
    }); 
} 
4

Avez-vous essayé d'appliquer le style CSS text-transform à vos commandes?

0

Vous posez une question intéressante. Agir sur chaque appui sur une touche peut être plus restrictif car vous ne saurez pas ce qui vient immédiatement après un code clé donné (la complexité d'annuler une réaction qui s'avère incorrecte pourrait signifier devoir aller à une routine basée sur TextRange de toute façon). Accordé, je n'ai pas lutté avec le code sur ce problème à ce jour, donc c'est une hypothèse dans ma tête.

à toute longueur, voici une fonction Boîtier Titre (implémentation java inspiré par une automatisation de blogs John Gruber) qui peut stimuler des idées en matière de manipulation du code de boîtier réelle:

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

1

Parfois, ne pas le faire est la bonne réponse à un problème de codage.

Je ne le ferais vraiment PAS, sauf si vous pensez que vous pouvez écrire un script pour définir correctement le cas dans la phrase suivante, si vous deviez d'abord le convertir en minuscules et le passer dans le script. Jean-Luc «Le Roi» O'Brien MacHenry van d'Graaf IIV (Ph.D., OBE), a quitté son Macintosh chez Macdonald avec ses amis MacIntosh et MacDonald. Jésus a donné sa ST Atari à AT & "Aids for AIDS" de T à St George, avec Van Halen dans la fourgonnette de van Henry, en interprétant The Tempest.

Vous vous êtes préparé à une chute en essayant de créer un analyseur de langage naturel. Vous ne pouvez jamais le faire aussi bien que l'utilisateur le fera. Au mieux, vous pouvez faire une approximation et donner à l'utilisateur la possibilité de modifier et de forcer une correction lorsque vous vous trompez. Mais souvent dans de tels cas, l'édition est plus de travail que juste le faire manuellement et à droite en premier lieu.Cela dit, si vous avez l'espace et la puissance nécessaires pour stocker et rechercher un grand corpus de mots en majuscules, vous pourriez au moins avoir un coup sauvage dans le cas le plus probable.

Questions connexes