Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: FF спотыкается на регулярке JS
 
 автор: Deed   (13.05.2012 в 11:18)   письмо автору
 
 

Здравствуйте!
Вот такой фрагмент кода изменения текста в инпуте "на лету":


$('#site_name, #full_name, #electromail').bind("keydown keyup", function(){
    
    $(this).val($(this).val().replace(/^\s+/g,''));
    $(this).val($(this).val().replace(/\b\s+\b/g,' '));
    
});
    
    $('#site_name').bind("focusout mouseleave",function() {

        $(this).val($(this).val().replace(/\s+$/,''));
        
        $(this).val($(this).val().replace(/[^\w\d_-\sа-яё]/i,''));  // ← проблема
    
           // other code.........    
    });
    



В общем, суть регулярок - удалять "опасные" символы "на лету", это не проблема.
Проблема вот в чем. Firefox спотыкается на проблемной строке и скрипт не выполняется. Стоит ее экраинровать - скрипт работает. Причем, этот бзик - только в FF. Опера, Хтом, ИЕ - обрабатываю этот код безупречно.
Что тут можно сделать, подскажите.
Спасибо.

  Ответить  
 
 автор: confirm   (13.05.2012 в 12:47)   письмо автору
 
   для: Deed   (13.05.2012 в 11:18)
 

Опять вы к лисе с претензиями, а ведь у вас ошибка и это ваша ошибка, и все браузеры ее будут воспринимать как ошибку, игнорировать, обрабатывать неверно. Скажите спасибо лисе, что ваш баг замечает. - надо экранировать, w - класс описывающий латинские символы, цифры и подчеркивание, а значит d_ лишнее, и нужно добавить модификатор g.
/[^\w\-\sа-яё]/gi

  Ответить  
 
 автор: Deed   (13.05.2012 в 14:28)   письмо автору
 
   для: confirm   (13.05.2012 в 12:47)
 

Уважаемый confirm.
ВСЕ браузеры, кроме FF скрипт обрабатывают. За \d - спасибо, я просто невнимательно регулярку составил. А модификатор g я убрал перед публикацией своего вопроса - думал, освобожу пару байт памяти, авось FF угомонится. Не вышло...
Еще раз повторю: ВСЕ браузеры обрабатывают скрипт корректно, КРОМЕ FF 12.0.
Я уже и плагины все отключал у лисы, но все равно, не жрет она скрипт с этой строкой.

  Ответить  
 
 автор: confirm   (13.05.2012 в 14:56)   письмо автору
 
   для: Deed   (13.05.2012 в 14:28)
 

Вы уверены, что FF виноват, и не справедлив к вам? А ведь он вам показывает (если конечно вы удосужились бы заглянуть в консоль ошибок), где вы ошиблись.
Вы прописываете диапазон значений а-я (вы понимаете какую роль здесь играет дефис?), и рядом же пытаетесь ввести в заблуждение, непонятным выражением. Не может быть такого диапазона _-\s, он не логичен, и слава богу, что FF это понимает.

  Ответить  
 
 автор: Deed   (13.05.2012 в 15:25)   письмо автору
 
   для: confirm   (13.05.2012 в 14:56)
 

+++

  Ответить  
 
 автор: confirm   (13.05.2012 в 15:33)   письмо автору
 
   для: Deed   (13.05.2012 в 15:25)
 

Что сие означает? )
Вот если бы вы написали вот так (оставив все ваше) [^\w\d_\sа-яё-], то и FF бы не заикнулся. Иначе экранирование [^\w\d_\-\sа-яё], и это правильно.

  Ответить  
 
 автор: Deed   (13.05.2012 в 15:37)   письмо автору
 
   для: confirm   (13.05.2012 в 15:33)
 

Не успел :)

Спасибо!
Трабл, и правда, был в регулярке! А именно в тире между символьными классами. После перестановки: /[^\w_\sа-яё-]/ig FF прекратил бойкот.
http://jsfiddle.net/j8M7W/2/

Но что-то много у FF фич и особенностей, на мой взгляд.

  Ответить  
 
 автор: confirm   (13.05.2012 в 15:39)   письмо автору
 
   для: Deed   (13.05.2012 в 15:37)
 

Это не FF фича, это ваша ошибка - нельзя так, поймите в конце концов. Задайтесь вопросом, почему диапазон a-z это логично, и почему ё надо указывать вне а-я?

  Ответить  
 
 автор: Deed   (13.05.2012 в 16:03)   письмо автору
 
   для: confirm   (13.05.2012 в 15:39)
 

Erara humanum est, дружище!
А насчет регулярок - у меня никогда с ними особых проблем не было. Как-то с самого начала пошли они без напряга :)
На ваш вопрос развернуто ответить не могу. Но, вроде как, код кириллической буквы "ё" в ВОМ стоит отдельно от сплошного диапазона остальных букв.

  Ответить  
 
 автор: confirm   (13.05.2012 в 16:10)   письмо автору
 
   для: Deed   (13.05.2012 в 16:03)
 

При чем тут ВОМ? Посмотрите код литер a-z и а-я, ё, и все станет понятно. Может после этого вы поймете, что означает диапазон _-\s, и что FF на 100% прав, указывая на такую лажу (кстати в консоль все-таки загляните, поинтересуйтесь содержанием сообщения об ошибке).

  Ответить  
 
 автор: Deed   (13.05.2012 в 16:16)   письмо автору
 
   для: confirm   (13.05.2012 в 16:10)
 

Да что ж вы так ругаетесь :)
В консоль посмотреть - это первое дело. В моем случае там была лишь нотация на использование "Устаревшего атрибута AttrNode..."

Кстати, рекомендую: http://gskinner.com/RegExr/desktop/RegExr.air

  Ответить  
 
 автор: confirm   (13.05.2012 в 16:26)   письмо автору
1.2 Кб
 
   для: Deed   (13.05.2012 в 16:16)
 

Если бы я начал ругаться...
Специально написал, чтобы показать -->

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

Спасибо, но у меня есть отличные учебники по JavaScript.

  Ответить  
 
 автор: Deed   (13.05.2012 в 16:48)   письмо автору
 
   для: confirm   (13.05.2012 в 16:26)
 

Это не учебник, это air-программулинка для теста регулярок. Установки не требует.

  Ответить  
 
 автор: confirm   (13.05.2012 в 16:52)   письмо автору
 
   для: Deed   (13.05.2012 в 16:48)
 

Не надо, у меня все это есть в твердой валюте.

  Ответить  
 
 автор: Deed   (13.05.2012 в 17:09)   письмо автору
 
   для: confirm   (13.05.2012 в 16:52)
 

Ок! А я ща буду присобачивать выбор "Откуда?" с динамической подгрузкой региона и города.
http://habrahabr.ru/post/21949/

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования