Как бы вы реализовали автокапитализацию в JavaScript / HTML? - PullRequest
2 голосов
/ 20 сентября 2008

Мне нужно реализовать автокапитализацию внутри элемента управления Telerik RadEditor на странице ASPX при вводе пользователем.

Это может быть специальное решение для IE (IE6 +).

В настоящее время я фиксирую каждое нажатие клавиши (вниз / вверх) по мере того, как пользователь печатает, чтобы поддерживать отдельную функцию, называемую «макросами», которая представляет собой по существу короткие ключевые слова, которые расширяются до форматированного текста. т. е. макрос «так» может автоматически расширяться при попадании пробела в «stackoverflow».

Тем не менее, у меня есть доступ к информации keyCode, а также я использую методы TextRange для выбора слова («так») и расширяю его до «stackoverflow». Таким образом, у меня есть некоторое подобие контекста.

Однако мне нужно проверить этот контекст, чтобы узнать, должен ли я использовать заглавные буквы. Это также должно работать независимо от того, задействован ли макрос.

Поскольку я отслеживаю нажатия клавиш для макросов, должен ли я просто следить за пунктуацией (это больше, чем просто точки, которые обозначают заглавную букву) и автоматически вводить заглавную букву при вводе следующей буквы, или я должен использовать TextRange и анализировать контекст? 1011 *

Ответы [ 4 ]

4 голосов
/ 20 сентября 2008

Я не уверен, что это то, что вы пытаетесь сделать, но вот функция ( ссылка ) для преобразования данной строки в регистр заголовка:

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);
    });
}
4 голосов
/ 20 сентября 2008

Вы пытались применить стиль text-transform CSS к своим элементам управления?

2 голосов
/ 13 февраля 2012

Иногда не делать этого - правильный ответ на проблему кодирования.

Я бы на самом деле НЕ сделал этого, если только вы не чувствуете, что можете написать скрипт для правильной установки регистра в следующем предложении, если бы вы сначала преобразовали его в строчные и передали в сценарий.

Жан-Люк "Король" О'Брайен МакГенри ван д'Грааф IIV (доктор философии, OBE) оставил свой Macintosh в Macdonald's вместе со своими друзьями MacIntosh и MacDonald. Иисус выступил со своим Atari ST на концерте AT & T «Aids for AIDS» в Сент-Джорджес, с Ван Халеном в фургоне ван Генри, который исполнил «Бурю».

Вы настроили себя на неудачу, пытаясь создать парсер естественного языка. Вы никогда не сможете сделать это так, как это сделает пользователь. В лучшем случае вы можете сделать приближение и дать пользователю возможность редактировать и вносить исправления, если вы ошиблись. Но часто в таких случаях редактирование - это больше, чем просто ручная работа и, во-первых, прямо.

Тем не менее, если у вас есть место и возможности для хранения и поиска в большом n-граммовом корпусе слов с подходящей заглавной буквой, вы, по крайней мере, сможете получить дикий удар в наиболее вероятном желаемом случае.

0 голосов
/ 20 сентября 2008

Вы задаете интересный вопрос. Действия при каждом нажатии клавиши могут быть более ограничивающими, потому что вы не будете знать, что происходит сразу после данного кода клавиши (сложность отмены реакции, которая оказывается неправильной, может означать необходимость в любом случае перейти к процедуре на основе TextRange). Конечно, я не боролся с кодом по этой проблеме до настоящего времени, так что это гипотеза в моей голове.

В любом случае, вот функция Title Casing (реализация java, вдохновленная автоматизацией блогов Джона Грубера), которая может стимулировать идеи, когда дело доходит до обработки реального кода оболочки:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...