Как бы вы реализовали автоматическую капитализацию в JavaScript/HTML?

StackOverflow https://stackoverflow.com/questions/107546

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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 для ваших элементов управления?

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top