Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверьте регулярку (https://javascript.ru/forum/misc/6208-proverte-regulyarku.html)

greatilya 18.11.2009 12:36

Проверьте регулярку
 
Опять я с регуляркой лезу....
Просьба проверить регулярку, написана она под РНР, но как я понимаю особых отличий нет.
function in_russian($text)
{
	$text = ereg_replace("[^".chr(0x7F)."-".chr(0xff)."\-]", "", $text);
	return $text;
}

function in_russian_fio($text)
{
	$text = ereg_replace("[^".chr(0x7F)."-".chr(0xff)."\.\ \-]", "", $text);
	return $text;
}

В function in_russian нужно чтобы остались только русские буквы и "-".
В function in_russian_fio нужно чтобы остались только русские буквы, пробелы, точки и "-".

Посмотрите пожалуйста, не допустил ли я ошибок? Очень нужно чтоб эти функции работали 100% правильно, сам то их проверил, вроде результат правильный.

e1f 18.11.2009 13:00

Раюотать -- работает, но вот как быть с Юникодом?

Kolyaj 18.11.2009 13:32

Пробелы, точки и дефисы в символьном классе экранировать не надо (пробелы вообще никогда не надо). Точка автоматически перестает быть метасимволом в символьном классе, а дефис просто должен стоять на первом или на последнем месте.

Цитата:

Сообщение от e1f
но вот как быть с Юникодом?

'\x7F' || '\u007F'

greatilya 18.11.2009 14:39

Цитата:

Сообщение от e1f
но вот как быть с Юникодом?

Извиняюсь если скажу сейчас что-то глупое, но все-же:
страница у меня в кодировке cp1251
<meta http-equiv="Content-Type" content="text/html; charset=cp1251" />

кодировка по умолчанию у сервера тоже cp1251.
Откуда тогда взяться юникоду?
Как я понимаю символы юникода могут быть вставлены пользователем сайта в поля регистрации, и как я понимаю для этого им надо будет вставить эти символы специально извне. Но тогда регулярка вырежет этот юникод, чтоб не баловались....
Или юникод может попасть другим способом и тогда стоит доработать регулярку?
как я понял для юникода нужна доработка следующая:
$text = ereg_replace("[^".chr(0x7F)."-".chr(0xff)."\u007F-\u00FF-]", "", $text);

Хотя наверное что-то не так написал.

e1f 18.11.2009 15:16

Kolyaj,
а разве не '\u0430' вместо '\u007F'?

Kolyaj 18.11.2009 15:22

Цитата:

Сообщение от greatilya
Извиняюсь если скажу сейчас что-то глупое, но все-же:
страница у меня в кодировке cp1251

Извинения приняты: внутри JS все в юникоде независимо от кодировки страницы.

Цитата:

Сообщение от e1f
а разве не '\u0430' вместо '\u007F'?

Если это код в cp1251, то да. Я для примера написал.

greatilya 19.11.2009 07:02

Еще раз извиняюсь за навязчивость:
Цитата:

Сообщение от Kolyaj
внутри JS все в юникоде независимо от кодировки страницы.

вот у меня в форме есть поле input, я его проверяю на JS только перед отправкой формы на необходимую длинну текста, на символы в JS я его не проверяю. Форма отправляется методом POST. Кодировки страниц и сервера - 1251. Далее я проверяю регуляркой на русские символы средствами РНР. Как я понимаю о юникоде при таком раскладе мне можно не беспокоиться и остаться на таком варианте
$text = ereg_replace("[^".chr(0x7F)."-".chr(0xff)."-]", "", $text);

Правильно? :thanks:

Kolyaj 19.11.2009 12:04

В JS все в юникоде, в PHP все приходит в той кодировке, в которой страница.

Юникод, кстати, это не кодировка, а таблица символов, у которой есть различные кодировки, в том числе UTF-8.

Цитата:

Сообщение от greatilya
Как я понимаю о юникоде при таком раскладе мне можно не беспокоиться и остаться на таком варианте

Только не забывать, что в PHP и в JS будут разные коды символов после 127.

greatilya 19.11.2009 13:09

Kolyaj,
Спасибо огромное за Ваше терпение. И за подробные ответы.

Цитата:

Сообщение от Kolyaj
в PHP и в JS будут разные коды символов после 127

Это постараюсь понять уже на стадии функционирования проекта, сейчас нет совсем времени.


Часовой пояс GMT +3, время: 16:53.