Автор Тема: Проблем с кирилица и preg_match  (Прочетена 4077 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

luckyes

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 109
Проблем с кирилица и preg_match
« -: 14 Януари 2011, 13:56:08 »
Здравейте,  опитвам да проверявам дали дадено поле съдържа само букви, но кирилицата не я хваща и дава грешка, може ли някой да помогне. Кода с който се опитвам да го направя е :
preg_match("/^(a-zA-zа-яА-Я])+$/", $str)

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 94
  • Публикации: 4836
Re: Проблем с кирилица и preg_match
« Отговор #1 -: 14 Януари 2011, 14:18:36 »
Цитат
If you try to find the offset when searching in UTF-8 string (containing multibyte characters, like cyrillic characters) with preg_match, using the PREG_OFFSET_CAPTURE flag, you may have different result from what you expected.

First of all you must compiled PHP with Multibyte Support (mbstring). Then you must configure to use Multibyte Support functions (mb_*) or turn on some php Runtime Configurations (php.ini, apache vhost conf file, .htaccess or somewhere else):
     php_value           default_charset UTF-8
     php_value           mbstring.func_overload 7
     php_value           mbstring.internal_encoding UTF-8
     php_value           mbstring.detect_order UTF-8

When using preg_match with PREG_OFFSET_CAPTURE flag and UTF-8 string the function will count bytes and NOT characters, so 2 bytes but NOT 1 character for some multibyte character. That's way the offset will be more than what you expected.

My simple solution is using mb_strpos:
     ...
     preg_match($pattern, $found_text, $matches, PREG_OFFSET_CAPTURE);
     // This will convert $matches[0][1] multibyte byte length to multibyte character length (UTF-8)
     $matches[0][1] = mb_strpos($found_text, $matches[0][0]);
     ...

P.S. The $pattern variable must use "/u" switch for Unicode!!!
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

luckyes

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 109
Re: Проблем с кирилица и preg_match
« Отговор #2 -: 14 Януари 2011, 14:34:42 »
Благодаря ти много, стана супер :).

petelko23

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 1
Re: Проблем с кирилица и preg_match
« Отговор #3 -: 05 Август 2011, 10:45:37 »
еве како preg_match може да работе с кирилица:

http://itworkarounds.blogspot.com/2011/08/validating-cyrillic-utf8-alphanumeric.html