Author Topic: Как применять к конкретной букве в слое toUpperCase() и toLowerCase()  (Read 1137 times)

Offline cetsalcoatle

  • Герой
  • *
  • Posts: 4862
  • Карма: +432/-317
  • Благородный муж прям и твёрд, но не упрям.
    • View Profile
Вот допустим мне хочется сделать так, чтобы в поле ввода можно было вводить любую дичь, например, вОТ нЕчто ТАКое, а на выходе что бы возвращался нормальный текст, где в каждом предложении только первая буква является заглавной. Я думал вначале запихнуть текст в массив и через индексы привести рандомный текст в порядок, но потом подумал ещё, что-то какая-то дичь получается.  :what?

Останься прост, беседуя с царями,
Останься честен, говоря с толпой;
Будь прям и тверд с врагами и друзьями,
Пусть все, в свой час, считаются с тобой;

Simba mwenda pole ndiye mla nyama

Offline Bhudh

  • Дважды герой
  • **
  • Posts: 6411
  • Карма: +2208/-332
    • View Profile
К сожалению, в String.prototype нет метода вроде title(), который приводил бы строку к требуемому виду, поэтому единственное решение это
Code: (JavaScript) [Select]
'вОТ нЕчто ТАКое'.toLowerCase().split(' ').map(s => s[0].toUpperCase()+s.slice(1)).join(' ');
Можно оформить в виде отдельной функции или таки даже метода title в String.prototype, что строго не рекомендуется (по прототипам нативных объектов лазить; некоторые нынешние браузеры вообще такое зопресчают).
Jestem dokładny i dociekliwy. (Wg Pinii.)
Всё, что нужно для торжества зла — это бездействие добрых людей. Поэтому бездействовать не надо. Алексей Навальный

Offline Bhudh

  • Дважды герой
  • **
  • Posts: 6411
  • Карма: +2208/-332
    • View Profile
На Python, надо сказать, тоже не сильно короче, там разве что метод str.capitalize помогает, который можно передавать в качестве коллбэка, но он на всю строку работает, так что приходится всё равно сплитить.
Code: (Python) [Select]
' '.join(map(str.capitalize, 'вОТ нЕчто ТАКое'.split()))
Кстати, работает с кириллицей.
Jestem dokładny i dociekliwy. (Wg Pinii.)
Всё, что нужно для торжества зла — это бездействие добрых людей. Поэтому бездействовать не надо. Алексей Навальный

Offline Квас

  • Ветеран
  • *****
  • Posts: 1430
  • Карма: +422/-15
    • View Profile
Quote
где в каждом предложении только первая буква является заглавной

Для естественного языка писать алгоритмы сложно.

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

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

А если нужно сильно ограничить ввод, может быть, попытаться юзать селекты? Или, скажем, превращать ввод в заглавные буквы? (Как когда вручную заполняют в квадратах заглавными буквами.)
« Last Edit: 26 June 2024, 14:40:06 by Квас »

Offline Квас

  • Ветеран
  • *****
  • Posts: 1430
  • Карма: +422/-15
    • View Profile
Кстати, в техническом английском дичь является нормой: OpenSSL, IoT и т. п.

Offline Bhudh

  • Дважды герой
  • **
  • Posts: 6411
  • Карма: +2208/-332
    • View Profile
С другой стороны, если пользователь вводит дичь - может быть, для него это имеет смысл?
Адреса файлов при загрузке в puu.sh, кстати, регистрозависимы. Не знаю, как это делается, обычно URI пофиг, в каком регистре написано, что lingvopolitics.org, что LINGVoPOLITICS.oRg.

P. S. А вот форумному парсеру УРЛов, как выяснилось, не пофиг, каким регистром название протокола в тэге [url][/url] написано, поэтому [url]https://lingvopolitics.org[/url] и [url]hTTps://lingvopolitics.org[/url] для него означают разные вещи.
Это явный баг, который стоит поправить.
Jestem dokładny i dociekliwy. (Wg Pinii.)
Всё, что нужно для торжества зла — это бездействие добрых людей. Поэтому бездействовать не надо. Алексей Навальный