Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Оставить только кирилицу в строке
Форумы портала PHP.SU » PHP » Регулярные выражения » Оставить только кирилицу в строке

Страниц (1): [1]
 

1. murich - 25 Сентября, 2007 - 16:04:26 - перейти к сообщению
Нужно оставить в строке только символы кирилицы. Без знаков припинания, латиницы и всех остальных символов
Использовать str_replace() для каждого символа латиницы и знаков припинания- грамостко както и не рационально на мой взгляд.
Подскажите, что можно сделать?\n\n(Добавление)
Пробел также оставить нужно
2. EuGen - 25 Сентября, 2007 - 17:46:28 - перейти к сообщению
Все решается довольно просто:
PHP:
скопировать код в буфер обмена
  1.  
  2. $pattern="/[x00-x7F]*/";
  3. //$var-то, где заменяем
  4. preg_replace($pattern,'',$var);
  5.  
3. valenok - 25 Сентября, 2007 - 18:35:32 - перейти к сообщению
\x00-\x7F\n\n(Добавление)
форум съел слэш
4. murich - 25 Сентября, 2007 - 19:11:54 - перейти к сообщению
Почти то что нужно. Остались кавычки, восклицательный знак, точка, буквы "y" и "z" , скобки. Они не нужны
5. evgenijj - 25 Сентября, 2007 - 19:16:30 - перейти к сообщению
Мне кажется, вы как-то вольно подошли к решению задачи. Ведь нужно оставить только кириллицу (и, возможно, пробел)
PHP:
скопировать код в буфер обмена
  1.  
  2. $text = preg_replace("#[^\\xC0-\\xFF\\s]#", "", $text);
  3.  
6. murich - 25 Сентября, 2007 - 19:35:42 - перейти к сообщению
Спасибо большое. Теперь все как нужно.
Спасибо вам и этому форуму за быстрые ответы на все мои ньюбовские вопросы))
7. Staind - 29 Ноября, 2007 - 21:02:46 - перейти к сообщению
А почему нельзя вместо xC0-xFF написать просто [а-я]|[А-Я] - или это не совсем корректно? (я только вот вот начально изучать рег. выражения.
8. valenok - 08 Декабря, 2007 - 02:34:37 - перейти к сообщению
не везде сущетсвуют а-Я
А вот xC0-xFF есть везде
9. Staind - 12 Декабря, 2007 - 19:34:56 - перейти к сообщению
Понял, спасибо. Правил везде.
10. IOpeH - 09 Июня, 2008 - 22:40:37 - перейти к сообщению
valenok, как понять не везде , где существует а где нет ?
11. valenok - 09 Июня, 2008 - 23:27:08 - перейти к сообщению
не во всех локалях и системах установлена кирилица.
12. IOpeH - 10 Июня, 2008 - 14:19:12 - перейти к сообщению
подскажите плиз, где можно по такие штуки xC0, xFF узнать побольше
13. chaynyk - 25 Марта, 2009 - 11:49:17 - перейти к сообщению
Плиз, подскажите не работает на сервере [а-я].
Прибегая к вашему варианту, тоже тишина.
Как написать корректно?
(Создаваемое имя пользователя, только на кириллице)
PHP:
скопировать код в буфер обмена
  1.  
  2. if(!preg_match('/^[\xC0-\xFF]+$/', $username)) {
  3. echo    $error ;
  4. }
  5. else
  6. {
  7. //Регистрируем пользователя
  8. }
  9.  
14. valenok - 25 Марта, 2009 - 16:41:46 - перейти к сообщению
включи сообщения об ошибках и попробуй регулярку попроще. может они не включены
15. chaynyk - 02 Апреля, 2009 - 10:33:25 - перейти к сообщению
Нашел ошибку. Ни когда не думал, что такое может быть с регулярными выражениями.
Причина была в кодировки. Сам сайт в UTF-8 и БД и т.д. А [а-я], я так понимаю работает только с win. Если строка UTF-8 кодировки то [а-я] работать не будет. После перекодировки строки (для проверки) из UTF-8 в Windows -1251, все четко заработало.
Так что, кто с этим столкнется, стоит обратить на это внимание.

 

Powered by ExBB FM 1.0 RC1