String - Модуль для работы со строками

Делитесь модулями
  • @GhostZ огласите весь список функций, пожалуйста

  • @romanbiz, все полезные функции не имеющие действий:

    _get_type(data) //Вернет тип указанных данных. В отличии от typeof возвращает не просто object при любом объекте, а object, null, array, date или regexp в зависимости от объекта.
    
    _validate_argument_type(data, type, name, act) //Вернет ошибку если тип data не соответствует указанному аргументу type, name - имя аргумента, act - имя действия. type может быть списком из нескольких возможных типов.
    
    _is_nil(data) //Вернет true, если data равно undefined или null, в остальных случаях вернет false.
    
    _is_nilb(data) //Вернет true, если data равно undefined, null, пустой строке, в остальных случаях вернет false.
    
    _avoid_nil(data, def) //Если data равно undefined или null, то вернет def. Если def не указан, вернет пустую строку.
    
    _avoid_nilb(data, def) //Если data равно undefined, null, пустой строке, то вернет def. Если def не указан, вернет пустую строку.
    
    _escape_regexp(str) //Экранирует специальные символы регулярных выражений в указанной строке
    
    _uniq_arr(arr) //Вернет указанный список без дубликатов
    
    _sort_arr(arr, asc) //Вернет отсортированный список, asc - необязательный параметр, сортировать по возрастанию, если true или не указан отсортирует по возрастанию, если false отсортирует по убыванию.
    
    _is_json_string(data) //Вернет true, если data является валидной json строкой, в остальных случаях вернет false.
    
    _to_arr(data) //Преобразовывает указанную строку в список/объект.
    _to_arr([1, 2, 3]) //[1, 2, 3]
    _to_arr('[1,2,3]') //[1, 2, 3]
    _to_arr('{"a":1,"b":2,"c":3}') //{a:1, b:2, c:3}
    _to_arr('1,2,3') //[1, 2, 3]
    _to_arr('one, two, three') //['one, 'two', 'three']
    
    _no_exponents(num) //Преобразует число в строку без экспоненты.
    _no_exponents(1e-8) //"0.00000001"
    String(1e-8) //"1e-8"
    
    _from_string(str) //Преобразует указанную строку в другой тип данных, в число, true или false, объект или массив, null или undefined.
    
    _trim_left(str, chars) / _trim_right(str, chars) //Части действия "Подровнять" для левой и правой части, chars - необязательный параметр, обрезаемые символы.
    
    _trim_arr(arr, chars, left, right) //Тоже самое что и действие "Подровнять", но для списка строк. chars - необязательный параметр, обрезаемые символы. left/right - необязательные параметры с каких сторон обрезать.
    
    _clean_arr(arr, chars_to_delete, chars_to_space, multiple_spaces) //Тоже самое что и действие "Очистить", но для списка строк. chars_to_delete/chars_to_space - необязательные параметры, удаляемые символы/символы заменяемые пробелами. multiple_spaces - необязательный параметр, заменять многочисленные пробелы на одиночные.
    
    _normalize_phone_number(phone_number) //Нормализовать телефонный номер. Скорей всего будет улучшена и в будущем добавлена в виде действия.
    _normalize_phone_number('7 (800) 555 35 35') //"78005553535"
    _normalize_phone_number('+78005553535') //"78005553535"
    _normalize_phone_number('88005553535') //"88005553535"
    
    _format_phone_number(phone_number, mask) //Форматировать номер по указанной маске. Скорей всего будет улучшена и в будущем добавлена в виде действия.
    _format_phone_number('78005553535', '+X (XXX) XXX-XX-XX') //"+7 (800) 555-35-35"
    _format_phone_number('+78005553535', 'XXXXXXXXXX') //"8005553535"
    
    _query_string //https://nodejs.org/docs/latest/api/querystring.html
    
    _query_string.encode(obj) //Преобразует объект в строку запроса
    _query_string.encode({foo:'bar',baz:'qux'}) //"foo=bar&baz=qux"
    
    _query_string.decode(str) //Преобразовывает строку запроса в объект
    _query_string.decode("foo=bar&baz=qux") //{foo:'bar', baz:'qux'}
    
    _url(url).set(name, value).toString() //Заменить элемент ссылки, url - ссылка, name - название элемента, value - значение элемента.
    
    _ua(ua).changeBrowserVersion(version).toString() //Заменить версию браузера в User-Agent, ua - User-Agent, version - нужная версия браузера. Работа проверялась только с User-Agent от Chrome.
    
    _punycode //https://www.npmjs.com/package/punycode
    
  • Что за магия тут происходит? Первое сообщение поменяло автора, причём время его отправления меньше, чем время отправления первого комента к теме. @Fox, харе шалить)

  • @DoctorKrolic said in String:

    Что за магия тут происходит? Первое сообщение поменяло автора, причём время его отправления меньше, чем время отправления первого комента к теме. @Fox, харе шалить)

    Да я решил исправить ситуацию, что бы автор модуля мог сам менять шапку и следить за темой. Я просто закрыл свою тему и перенёс все сообщения от туда - сюда.

  • @Fox
    Модуль будет добавлен в следующую версию BAS.
    Вопрос не много не по теме, а когда хоть примерно ждать эту следующую версию в этом месяце или в следующем, или вообще в начале лета?

  • @gomeapat said in String:

    Вопрос не много не по теме, а когда хоть примерно ждать эту следующую версию в этом месяце или в следующем, или вообще в начале лета?

    Нее, я на эту дорожку снова не вернусь! Я не буду говорить ни какие даты, даже примерные, меня потом заклюют в случае чего :D

  • @Fox Кто заклюёт? Пользователи с бесконечными вопросами, или вышестоящие за то, что "слили служебную тайну"?) Вы хотя бы знаете сами эти даты? Только плиз честно

  • @000 Что "да"?

  • @DoctorKrolic said in String:

    @000 Что "да"?

    Кажется фокс прокололся с другого аккаунта )))

  • @dobrok said in String:

    @DoctorKrolic said in String:

    @000 Что "да"?

    Кажется фокс прокололся с другого аккаунта )))

    Тьфу...забыл выход нажать. Сейчас все удалю...

  • @000 said in String:

    @dobrok said in String:

    @DoctorKrolic said in String:

    @000 Что "да"?

    Кажется фокс прокололся с другого аккаунта )))

    Тьфу...забыл выход нажать. Сейчас все удалю...

    у меня на этом форуме только один аккаунт, ну если только шизофрения не живёт отдельной жизнью :DDD

  • Количество слов
    баг если слово - Przemysław
    Ето изза символа польського - показивает 2 слова. Жаль насторил себе на чекинг етим модульом

  • @selector, это не баг, а недоработка, т.к ł - юникод символ, а данное действие поддерживало только небольшую часть юникод символов.

    Добавил поддержку большинства юникод букв и чисел в действия "Разделить предложение на слова" и "Количество слов", перекачайте модуль из шапки темы.

  • Добавьте плиз в модуль также Decode/Encode такого формата - \u0443\u043a\u0430\u0437\u0430\u043d\u043e , сейчас не получается через бас его декодировать

  • @Zack9 выполнить код

    [[STRING]] = 'указано'
    
    //encode
    [[STRING]] = [[STRING]].split('').map(function(char) {
        var code = char.charCodeAt(0).toString(16)
        while(code.length < 4) {
            code = '0' + code
        }
        return '\\u' + code
    }).join('')
    log([[STRING]])
    
    //decode
    [[STRING]] = [[STRING]].replace(/\\u([^\\]+)/g, function(str, code) {
        return String.fromCharCode(parseInt(code, 16))
    })
    
    log([[STRING]])
    
  • @UserTrue не срабатывает, но мне больше для кодирования обычного текста в этот формат нужно. Сейчас онлайн сервис для этого использую, но лучше конечно в модуль добавить

  • @Zack9 изменил

  • @UserTrue спасибо это работает

  • Версия BAS 24.0.8
    из модуля "Строка" - действие "Создать CSV строку", копируем метод в виде BAS API

    VAR_CSV_STRING = _csv_generate([_avoid_nil("One"), _avoid_nil("TWO")], ":");
    

    В режиме запуска ошибка - ReferenceError: Can't find variable: _csv_generate во время выполнения действия

    В версии BAS 23.2.2 - этот же код отрабатывает нормально
    8888.xml