Javascript альтернативы php функций.

January 19, 2008 Web разработка

Нашел файл - библиотеку функций, альтернатив php’шным на javascript’е. От элементарных вроде strtolower до адских вроде soundex:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function soundex( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // *     example 1: soundex('Kevin');
    // *     returns 1: 'K150'
 
    var i, j, l, r, p = isNaN(p) ? 4 : p > 10 ? 10 : p < 4 ? 4 : p,
    m = {BFPV: 1, CGJKQSXZ: 2, DT: 3, L: 4, MN: 5, R: 6},
    r = (s = str.toUpperCase().replace(/[^A-Z]/g, "").split("")).splice(0, 1);
    for(i = -1, l = s.length; ++i < l;){
        for(j in m){
            if(j.indexOf(s[i]) + 1 && r[r.length-1] != m[j] && r.push(m[j])){
                break;
            }
        }
    }
    return r.length > p && (r.length = p), r.join("") + (new Array(p - r.length + 1)).join("0");
}

Полный список:

  • addslashes
  • array_chunk
  • array_combine
  • array_diff
  • array_diff_assoc
  • array_key_exists
  • array_pop
  • array_push
  • array_search
  • array_shift
  • array_sum
  • array_unique
  • array_unshift
  • base64_decode
  • base64_encode
  • basename
  • checkdate
  • chr
  • count
  • crc32
  • date
  • empty
  • end
  • explode
  • function_exists
  • htmlentities
  • implode
  • include
  • include_once
  • in_array
  • is_array
  • is_numeric
  • levenshtein
  • ltrim
  • md5
  • nl2br
  • number_format
  • ord
  • printf
  • rand
  • reset
  • rtrim
  • soundex
  • sprintf
  • stripslashes
  • strip_tags
  • strlen
  • strpos
  • strrpos
  • strtolower
  • strtoupper
  • str_pad
  • str_repeat
  • str_replace
  • str_rot13
  • trim
  • ucfirst
  • ucwords
  • utf8_decode
  • utf8_encode
  • wordwrap

Я постоянно что-нибудь такое в гугле ищу, может и вам пригодится.

Комментарии (20)

  1. KOS_MOS

    Респект, отличная либа!

  2. FX Poster

    Ну, soundex не такая уж и сложная функция. :)

  3. andy.bezbozhny

    во спасибо. У меня так руки и не дошли собрать свои изыски в одну либу :)

  4. TracKer

    Спасибо! Как раз на днях искал функции для работы с массивами :)

  5. Steward

    было бы совсем замечательно если бы все эти функции были завёрнуты в своё пространство имён… “php” например :)

  6. jeka911

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

    KOS_MOS, andy, TracKer, пожалуйста, пожалйста, пожалуйста :))

    Steward, думаю, что подключать ее полностью все же не очень целесообразно. 40кб, не так уж и мало, а много функций этих юзать все равно редко где прийдется.

  7. nopox

    Идея отличная, жаль только одно: с направлением работы фатально ошиблись. Надо было не javascript под php подгонять, а наоборот: реализовать в php хотя бы какое-то подобие поведения типов JS. Например, строки сделать объектами. Простой пример с регулярными выражениями: какой код более лаконичен и красив? Такой:
    <?php
    $size = '';
    $string = "Jackodaws loves my big sphinx of quartz";
    if (preg_match('/(big|small)/i', $string, $match)) {
    $size = $match[1];
    $string = preg_replace(”/$size/”, $size == ‘big’ ? ’small’ : ‘big’, $string);
    }
    ?>

    или такой?
    <?php
    $size = '';
    $string = new String("Jackodaws loves my big sphinx of quartz");

    if ($regexp = $string->match('/(big|small)/i')) {
    $size = $regexp->getMatched(1);
    $string->replace("/$size/", $size == 'big' ? 'small' : 'big');
    }
    ?>

    Лично мне второй вариант как-то больше импонирует.

    Кстати, буквально вчера я думал на эту тему и даже кое-что написал, благо PHP5 позволяет довольно многое.

    Основная проблема подхода в том, что для того, чтобы строка сама по себе стала объектом, придётся или патчить php, или переписывать значительную часть кода, т.к. многие программисты не гнушаются выводить текст через echo. У меня всё построено несколько иначе, поэтому я себе такой подход позволить могу =)

    З.Ы. всё вышесказанное не претендует на истину в последней инстанции. Это всего лишь IMHO :)

  8. jeka911

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

    echo ведь не главное, как быть с конкатенацией. А вообще, может гоню, но в 6м есть какие-то извращения плана object to string, можно их заюзать.

  9. nopox

    Но как то вот, не настолько чтоб переписывать основы языка, имхо

    А язык переписывать и не надо, достаточно придумать собственную надстройку и использовать её в работе.

    Но все равно будет интересно посмотреть как ты реализуешь.

    С реализацией всё предельно просто: создаём класс, имеющий:

    закрытый член, который и будет хранить строку
    конструктор, единственный аргумент которого будет помещаться в тот закрытый член класса
    магический метод __toString(), определяющий поведение класса при использовании его в строковом контексте

    Примерно вот так:
    class String
    {
    private $_str = $str;

    public function __construct($str)
    {
    $this->_str = $str;
    }

    public function __toString()
    {
    return $this->_str;
    }

    public function length()
    {
    return strlen($this->_str);
    }
    }

    В этом классе реализован единственный прикладной метод: String::length(), который, как всем понятно, возвращает длину строки. Подобным образом можно обернуть самые нужные строковые функции (или даже все — тут вопрос лени, он у меня стоит очень остро :)). Определённые сложности возникнут с регулярными выражениями (одного класса String будет мало, как мне кажеися), но об этом мы поговорим в другой раз, если тема сильно заинтересует :).

    На всякий пожарный приведу пример использования:
    length(); // напечатает 7

    /**
    * Напечатали объект - получилась строка ;)
    *
    */
    print $myString; // напечатает Foo Bar
    ?>

    echo ведь не главное, как быть с конкатенацией.

    Как с конкатенацией быть, честно говоря, не знаю. Наверное, никак. Впрочем, у меня как-то не очень часто возникала потребность её использовать; если сильно припрёт, то можно исползовать родной подход. Или, что более красиво, нарисовать метод String::append():

    public function append($str)
    {
    $this->_str.= $str;
    }

    Так даже ещё симпатичнее будет, по-моему.

    А по сабжу… По-моему, глупо это — от красивого языка переходить к PHP, да ещё и процедурно… Собственно, за что многие не любят php, так это за низкий порог вхождения. Будь он чуть посложнее, глядишь, и не было бы кучи отстойных скриптов и множества дефейсов.

    З.Ы. А как-нибудь раскрасить код в комментах можно? Или выровнять хотя бы.

  10. jeka911

    Угу, теперь тебя понял. php переписать было бы тоже весело, чтоб он и при $var = “val”; объект создавал. А вообще - тема достойна развития, думаю многим будет интересно “яваскрипт функции на php” )

    Спасибо за туториал.

    Здесь как-бы больше не про переход к функциям, а мне эта штука более полезна просто как вроде справочника, потому как все время забываю на яваскрипте функции как звучат, а chm’а красивого так ни разу и не нашел.

    Раскрасить код… можно конечно :) Но я попробую плагин поискать.

  11. VLAD

    Подскажите как ети коды можна вставлять в Flash скрипты !

  12. jeka911

    Влад, я не знаю.

  13. ACID Jesus

    Интересно конечно… но вот где применить даже и не знаю, тем более что JS-фреймворки сейчас захватили почти всё…т.е. уже мало что нужно писать самому 8-)

  14. jeka911

    ACID Jesus, фреймворки ведь поверхностную работу выполняют. Логику все равно самому писать приходится.

  15. Алексей

    а по мне полюбас Prototype forever!

  16. jeka911

    А мой фломастер - наверное - jquery. :)

  17. nopox

    Вы, Алексей, тёплое с мягким путаете немного. Prototype.js (как, впрочем и jQuery) для других целей сделан, нежели эта сборка :)

  18. jeka911

    Вообще да, nopox прав.

  19. Алексей

    есть молоко из которого можно сделать творог или сырники. Рассматриваемая библиотека - это творог или сырники а прототайп и любой другой фреймворк это молоко. Уверяю Вас, если вы попытаетесь при создании ресурса смешать более 3 “полезные штуки” - начнется хаос… все перечисленные функции можно написать с помощью любого фреймворка, имхо!

  20. jeka911

    Можно конечно, но ничего удачнее не получится. Фреймворки ведь написаны для работы с dom, стилями, эффектами и т.п. А здесь - чистая логика, т.е. упрощать то по идее некуда.

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

Добавить комментарий

Вход с one-face