За последние 24 часа нас посетили 62126 программистов и 1791 робот. Сейчас ищут 929 программистов ...

регуляркО

Тема в разделе "JavaScript и AJAX", создана пользователем Апельсин, 18 июл 2010.

  1. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Есть 3 инпута. Первый - основной. В него вводится название, в остальные два это названием дублируется, но вырезаются с него ненужные символы. Код функции:
    [js]function getTag()
    {
    var descriptionObj = ge('description');
    var tagObj = ge('tag');
    var keywordsObj = ge('keywords');

    var re1 = new RegExp('[ ]+', 'gi');
    var re2 = new RegExp('[^a-z0-9_\-а-я]+', 'i');
    var re3 = new RegExp('[_]+', 'gi');

    var desObj = descriptionObj.value.replace(re1, '_');
    desObj = desObj.replace(re2, '');
    var end = desObj.toLowerCase();
    tagObj.value = end;

    keywordsObj.value = end.replace(re3, ', ');
    }[/js]

    То есть:
    Поле 1 - текст со всеми знаками.
    Поле 2 - как видно с регулярки - только a-z0-9_\-а-я, остальное вырезается.
    Поле 3 - только a-z0-9_\-а-я, только разделитель это запятая.

    Проблема - функция пропускает символы |, ~, №.
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    это найдет все строки с одним или несколькими пробелами
    одна или несколько не цифр не маленькая буква и не дефис: ~!@#$%^&*(){}[]., и все в этом духе, а еше A-Z А-Я
    одно или несколько нижних подчеркиваний
     
  3. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Padaboo
    И?
    Сначала пробелы удаляю, оставляю максимум один. Потом вырезаю все символы кроме [^a-z0-9_\-а-я]+. Для третего инпута меняю нижнее подчеркивание на запятую. Чего не вырезает |, ~, №
     
  4. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Код (Text):
    1. [^a-z0-9_\-а-я]|[~|№]
    :D
    фигня какая то, ненавижу регулярки ><
     
  5. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    апельсинчик, тут палка лишняя, ты в промежуток положил с _ до "а", ну туда и попадают твои спецсимволы, сотри ее и должно похадь имхэ
     
  6. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Padaboo
    ты просто не умеешь их готовить :)
     
  7. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    тогда получается вот так
    а почему так... вроде как он экранировал дефис
     
  8. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Padaboo
    сделай алерт этой строчки и о боже!!! удивишься!! ;)
     
  9. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    phpdude
    :DDD
     
  10. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Padaboo
    если хочется получить палку в строке - экранируем через \\, а не \ :)

    ну либо в исходном можно еще палку добавить и должно работать имхо
     
  11. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Херня какаято получается. Если набирать много символов типа )%;№+:%№/;№_%:)* такого, то она потом любые начинает пропускать. Даже такое не спасает [^a-z0-9а-я]+
     
  12. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Апельсин
    еще зубри матчасть

    модификатор g допиши, чтобы больше 1 замены в 1 строке делало.
     
  13. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    phpdude
    пля, пропустил тупо. для двух вставил g, для третего забыл. Спс
     
  14. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Апельсин
    бывает :)