forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   JavaScript / HTML (http://forum.boolean.name/forumdisplay.php?f=136)
-   -   regExp не понимает русь? (http://forum.boolean.name/showthread.php?t=18265)

Reizel 15.06.2013 23:17

regExp не понимает русь?
 
Есть инпут, на его изменение висит колбэк(jQuery). Там я вырезаю всё, кроме букв и цифр.

Код:

function parseIllegalData(_)
{
  _.val(_.val().replace(/[^a-zA-Zа-яА-Я\s]/g,''))
}

Работает верно, но русские буквы срезает как ножом. Пробовал что-то в стиле
/[^\w\d\sА-я]/g - всеравно не пашет. Кто что может сказать?

ПС на другой странице в этой же системе есть такое выражение:

Код:

$(this).val(val.replace(/[^a-zA-Zа-яА-Я_\s.]/g,''));
И здесь все работает отлично. В чем может быть баг?

Randomize 16.06.2013 04:54

Ответ: regExp не понимает русь?
 
Регулуярка работает корректно
http://jsfiddle.net/d2Ju2/

Попробуй записать так:
PHP код:

function parseIllegalData(_){
   var 
str _.val();
   
console.log(str);

   
str str.replace(/[^a-zA--яА-Я\s]/g"");
   
console.log(str);

  
_.val(str);


Сразу будет видно где что случилось

moka 16.06.2013 05:58

Ответ: regExp не понимает русь?
 
Да и для языков используй unicode символы радиусов а не сами символы:

/[^\u0040-\u1FE0\u2C00-\uFFC0 ]+/g
Не уверен что тебе все эти радиусы нужны, но они вроди включают только письменные символы всех языков. Тестировал на китайских, японском, французском, итальянском, русском, португальском и немецком. И он ещё включает "_". Лучше затести или посмотри на Unicode таблицу и включи то что тебе от туда нужно.

Ты пытаешься оставить только письменные символы в строке?

Reizel 16.06.2013 15:02

Ответ: regExp не понимает русь?
 
Цитата:

Сообщение от moka (Сообщение 261474)
Да и для языков используй unicode символы радиусов а не сами символы:

/[^\u0040-\u1FE0\u2C00-\uFFC0 ]+/g
Не уверен что тебе все эти радиусы нужны, но они вроди включают только письменные символы всех языков. Тестировал на китайских, японском, французском, итальянском, русском, португальском и немецком. И он ещё включает "_". Лучше затести или посмотри на Unicode таблицу и включи то что тебе от туда нужно.

Ты пытаешься оставить только письменные символы в строке?

Код:

function parseIllegalData(_)
{
  __ = _.val()
  _.val(__.replace(/[^\u0040-\u1FE0\u2C00-\uFFC0\s0-9]/g,''))
}

Помогло. Мне нужно было оставлять только буквы, цифры и пробелы

RegIon 16.06.2013 17:46

Ответ: regExp не понимает русь?
 
Цитата:

Сообщение от Reizel (Сообщение 261492)
Код:

function parseIllegalData(_)
{
  __ = _.val()
  _.val(__.replace(/[^\u0040-\u1FE0\u2C00-\uFFC0\s0-9]/g,''))
}

Помогло. Мне нужно было оставлять только буквы, цифры и пробелы


Ух, епрст, как удобно оперировать переменными с именами: _,__,___,____,____,_____ .....

Reizel 16.06.2013 21:04

Ответ: regExp не понимает русь?
 
Цитата:

Сообщение от RegIon (Сообщение 261505)

Ух, епрст, как удобно оперировать переменными с именами: _,__,___,____,____,_____ .....

в рабочем коде не так, не переживай

ABTOMAT 17.06.2013 01:06

Ответ: regExp не понимает русь?
 
Раз это http://jsfiddle.net/d2Ju2/ работает а у тебя нет, подозреваю, что ты просрал кодировку js-файла.

Reizel 17.06.2013 16:15

Ответ: regExp не понимает русь?
 
Цитата:

Сообщение от ABTOMAT (Сообщение 261529)
Раз это http://jsfiddle.net/d2Ju2/ работает а у тебя нет, подозреваю, что ты просрал кодировку js-файла.

Да вроде нет, в UTF8 всё. Мысль такая приходила уже.


Часовой пояс GMT +4, время: 09:02.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot