• Как обрезать строку до определенной длины и добавить многоточие?

    mizutsune
    @mizutsune
    I will live forever in the flame of your eyes.
    Если нужно просто обрезать строку по количеству символов, то этого можно добиться, например одной из этих функций:

    const truncateString = (s, w) => s.length > w ? s.slice(0, w) + "..." : s;
    
    const truncateString = (s, w) => s.length > w ? s.substring(0, w) + "..." : s;


    Пример использования:

    console.log(truncateString("123456789", 5));

    Но в этих двух вариантах есть по крайней мере, один заметный минус. Если после обрезки строки, в конце будет пробел: "123456 789", то выглядеть результат будет так: "123456 ..."

    Это решается достаточно легко. Воспользуемся функцией .trim() и в итоге, выше описанные функции, будут выглядеть так:

    const truncateString = (s, w) => s.length > w ? s.slice(0, w).trim() + "..." : s;
    
    const truncateString = (s, w) => s.length > w ? s.substring(0, w).trim() + "..." : s;


    Дополнительные решения

    Если нужно обрезать строку, а также удалить и определенные символы с конца строки(лишние точки, запятые, пробелы и прочее), перед добавлением троеточия, тогда можно сделать вот так:

    const truncateStringByLimitChars = ({ target, limit, pattern, useREGEx = true }) => {
      const ignoredChars = new RegExp(`[${pattern}]+$`, "g");
    
      const truncateString = () => {
        return useREGEx === false
          ? target.substring(0, limit).trim() + "..."
          : target.substring(0, limit).replace(ignoredChars, "").trim() + "...";
      };
    
      return target.length >= limit ? truncateString() : target;
    };


    Пример использования:

    console.log(
      truncateStringByLimitChars({
        target: "1234_______",
        limit: 8,
        pattern: [",", ".", "_"]
      })
    );


    Однако в таком случае - финальный размер строки, может быть намного меньше указанного в лимите, потому что функция удалит с конца строки все "лишние" символы. Хотя в некоторых случаях это может быть полезно.

    К примеру имеется строка: Hello__World. Обрезаем без удаления "лишних" символов до 7 символов:

    let string = "Hello__World",
    
    console.log(string.length > 7 ? string.slice(0, 7).trim() + "..." : string)


    Результат: Hello__...

    Наверное, ожидалось что в конце перед точками, не будет подчеркивания, однако оно есть и портит своим присутствием полученный результат. Тоже самое будет если вместо подчеркивания будет запятая, вопросительный знак, восклицательный знак и прочее.

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

    Однако это ещё не всё и при желании, можно дополнительно улучшить функцию - truncateStringByLimitChars, чтобы она корректно работала с такими строками:

    Hello-World.loooooooong.image.name.sss.123456789.jpg

    BackgroundImage_for__container.with.blog-news.cards.jpg


    Допустим имеется такая строка: "BackgroundImageForContainerWithBlogNewsCards.jpg" - это название изображения, которое выводится в определенном блоке.

    Пример:

    <div>Файл "BackgroundImageForContainerWithBlogNewsCards.jpg" успешно загружен</div>


    Задача: Обрезать эту длинную строку до 15 символов + сохранить расширение файла.

    Можно конечно и не модифицировать функцию, чтобы получить желаемый результат, например склеивая обрезанную строку с полученным расширением файла вне функции truncateStringByLimitChars, но это уже другая история и поэтому всё же модифицируем функцию.

    Модифицированная версия будет выглядеть так:

    const truncateString = configuration => {
         const {
            targetString: target,
            limitWords: limit,
            pattern = [",", ".", "_"],
            useREGEx = true,
            suffix = "...",
            addFileExtension = false
        } = configuration;
    
         const ignoredChars = new RegExp(`[${pattern}]+$`, "g");
    
         const reduceContentByLimitCharset = () => {
              return useREGEx === false ?
                 target.substring(0, limit).trim() :
                 target.substring(0, limit).replace(ignoredChars, "").trim();
         };
    
         const updatedContent = () => {
              const croppedString = reduceContentByLimitCharset();
              const fileExtension = target.slice(target.lastIndexOf(".") + 1);
    
              return addFileExtension === false ?
                 `${croppedString}${suffix}` :
                 `${croppedString}${suffix} .${fileExtension}`;
         };
    
         return target.length >= limit ? updatedContent() : target;
    };


    Использование:

    console.log(
         truncateString({
              targetString: "BackgroundImageForContainerWithBlogNewsCards.jpg",
              limitWords: 15,
              addFileExtension: true
         })
    );


    Результат: BackgroundImage... .jpg


    Есть конечно и другие варианты решения всех этих задач по обрезке строк, но, возможно вышеописанных методов будет достаточно.
    Ответ написан
    1 комментарий
  • Какой сервис для бекапа сайтов посоветуете?

    @skomoroh
    ISPmanager и ftp в топку

    на своей vds : rsync в crontab прописать и заливать на любой ssh
    Ответ написан
    Комментировать
  • Как продать сайт без хостинга?

    @Dvach
    Генератор тупых вопросов и ещё более тупых ответов
    Ну, если клиент согласен можно всё. Для демонстрации ты можешь или просто в браузере открыть. Или локально развернуть веб-сервер и пробросить его в мир чтобы по твоему внешнему IP его можно было "пощупать"

    Или ты про конкретные площадки? telderi.ru или другие
    Ответ написан
    3 комментария
  • Платформа/движок для сбора обращений граждан?

    Vamp
    @Vamp
    Подойдёт любая тикетница. Например, OTRS или osTicket. Каждое обращение - новый тикет. Тикетам можно настраивать напоминания, если они не закрыты какое-то время (sla), приоритеты.
    Ответ написан
    Комментировать
  • Платформа/движок для сбора обращений граждан?

    vabka
    @vabka Куратор тега Веб-разработка
    Из того что я видел "по простому" - это отслеживать обращения в тех же гуглотаблицах (так например одна партия в нашем городе делает, в рамках своего проекта помощи гражданам)
    А принимать их через гугл-формы или по почте.

    Ещё вариант - поднять какой-нибудь багтрекер (youtrack например. Он вроде даже бесплатен для некоммерческих организаций) и использовать его для обращений :)
    Если что, процесс можно подкорректировать, чтобы он соответствовал тому, как обрабатываются обращения.

    Если нужно что-то красивое - придётся разрабатывать самостоятельно или заказывать разработку, как обычно и поступают все муниципалитеты.
    Ответ написан
    Комментировать
  • Как записать несколько значений в одном поле MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тебе надо освоить базовые принципы реляционных баз данных
    и освоить такие понятия как "отношение один ко многим" и join

    Поскольку ответ на вопрос "Как записать несколько значений в одном поле MySQL?" звучит так:

    завести ещё одну таблицу, в которую писать нужные значения на разных строках, вместе с id строки из основной таблицы


    после этого делаешь запрос к этой таблице, передавая ид пользователя, и получаешь все его курсы

    и я очень, очень очень очень очень очень очень надеюсь что видеокурсы не по программированию.
    Ответ написан
    2 комментария
  • Как отменить подписку Adobe без штрафа?

    @ivanchik
    Спасибо всем советчикам!
    Я тоже не стал ругаться и просто уточнил, можно ли отменить подписку без штрафа:

    Manpreet: If you are willing to cancel your subscription,then there will be Early Termination Fee.
    Sergey Ivanov: Can it be done without fees?
    Manpreet: Please allow me 1-2 minute(s) to review your account details.
    Manpreet: Please stay connected while I cancel this for you and waive off the Fee.
    Manpreet: I have successfully cancel your subscription and waive off the cancellation fee and your confirmation case number is...
    Ответ написан
    Комментировать
  • Как удалить опрелённый комит в git-е, без удаления последующих?

    Eternalko
    @Eternalko
    Вот хороший алгоритм решения таких проблем:
    f57b04ecacf640ee952d2a91dcaa4046.png

    Сейчас и на будущее
    Ответ написан
    Комментировать
  • Чем заклеить светодиод?

    @lonelymyp
    Хочу вылезти из минуса по карме.
    Сдвижная шторка для камеры.
    Она на липучке клеится на камеру или куда угодно.
    Надо посмотреть текущий статус - открыл и посмотрел.
    473362.440@2x.jpg
    Ответ написан
    Комментировать
  • Почему шрифт рендерится не тем цветом, что я задал в CSS?

    Lynn
    @Lynn
    nginx, js, css
    Скорее всего проблема с цветовым профилем.
    Попробуйте открыть chrome://flags найти там пункт Force color profile и поменять на sRGB (и вообще поэкспериментировать с вариантами)

    Как бороться с черной магией?
    https://www.faqforge.com/windows/fixed-google-chro...
    Ответ написан
    1 комментарий
  • Как выполнить этот цикл?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Навскидку так
    uses math;
    for i := 0 to 100 do
    begin
      point := sin(DegToRad(6*pi/100 + i));
      ...
    end;


    fmx
    Path1.Data.Clear;
    Path1.Data.MoveTo(TPointF.Zero);
    for var i := 0 to 1000 do
    begin
      var Pt := TPointF.Create(i * 10, sin(DegToRad(6*pi/1000+i)));
      Path1.Data.LineTo(Pt);
    end;


    5f008d26e145a483982386.png
    Ответ написан
    Комментировать
  • Как исправить ошибку?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    TChart.SeriesList обращаться нужно не к классу, а объекту. А вы его не создали. И на форме его тоже нет.
    Ответ написан
    Комментировать
  • Выдаёт ошибку, что нужно исправить?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ

    Form1:=TForm1.Create(AOwner);
    Form1:=ShowModal;
    Form1:=Free

    Я в шоке. Что вы тут хотели сделать?
    Form1:=TForm1.Create(AOwner);
    Form1.ShowModal;
    Form1.Free;
    Ответ написан
    8 комментариев
  • Какую выбрать CMS с упором на код, без слишком навязчивого wysiwyg?

    возможно, modx
    Ответ написан
    Комментировать