Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: chen_dzen в Nov 11, 2010, 19:19



Титла: PHP проблем с preg_replace()
Публикувано от: chen_dzen в Nov 11, 2010, 19:19
Здравейте , нещо което на пръв поглед ми изглеждаше елементарно се оказа ,че доста ме изтормози , и накара да пиша тук . Та значи имам си един стринг искам всичко в него което е различно от буква да се превръща в интервал . ето го и кода  :
Код
GeSHi (PHP):
  1. $EN_STRING = $_POST['entext'];
  2.  
  3.  
  4. $UNALLOW  = array();
  5.  
  6.  
  7. $UNALLOW[0] = '/\$/';
  8. $UNALLOW[1] = '/%/';
  9. $UNALLOW[2] = '/&/';
  10. $UNALLOW[3] = '/\'/';
  11. $UNALLOW[4] = '/\(/';
  12. $UNALLOW[5] = '/\)/';
  13. $UNALLOW[6] = '/*/';
  14. $UNALLOW[7] = '/+/';
  15. $UNALLOW[8] = '/\,/';
  16. $UNALLOW[9] = '/./';
  17. $UNALLOW[10] = '/\//';
  18. $UNALLOW[11] ='/^[0-9]$/';
  19. $UNALLOW[12] = '/:/';
  20. $UNALLOW[13] = '/;/';
  21. $UNALLOW[14] = '/</';
  22. $UNALLOW[15] = '/=/';
  23. $UNALLOW[16] = '/>/';
  24. $UNALLOW[17] = '/?/';
  25. $UNALLOW[18] = '/@/';
  26. $UNALLOW[19] = '/[/';
  27. $UNALLOW[20] = '/]/';
  28. $UNALLOW[21] = '/^/';
  29. $UNALLOW[22] = '/_/';
  30. $UNALLOW[23] = '/`/';
  31. $UNALLOW[24] = '/{/';
  32. $UNALLOW[25] = '/|/';
  33. $UNALLOW[26] = '/}/';
  34. $UNALLOW[27] = '/~/';
  35. $UNALLOW[28] = '/$/';
  36. $UNALLOW[29] = '/!/';
  37. $UNALLOW[30] = '/"/';
  38.  
  39.  
  40.  
  41. //////////////////////////////////////////////////////////////////////
  42.  
  43. $replace = ' ';
  44.  
  45. echo preg_replace($UNALLOW, $replace, $EN_STRING);
  46.  
  47.  
и ето грешката в браузера : Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in /var/www/file.php on line 45


Титла: Re: PHP проблем с preg_replace()
Публикувано от: b2l в Nov 11, 2010, 19:28
Скандален код. Защо не направиш един pattern:
Код
GeSHi (PHP):
  1. $UNALLOW = '/\/\$\'.../'

PS: Чакай, че мисленето тази вечер ми е малко трудно. Всъщност с един възможно ли е да стане? Може би греша?

Но за 15 ред съм съгурен, че не е така. Според мен трябва да е:
Код
GeSHi (PHP):
  1. $UNALLOW[10] = '/\//';

14-ти:
Код
GeSHi (PHP):
  1. $UNALLOW[10] = '/\./';

От 16, до 25:
Код
GeSHi (PHP):
  1. $UNALLOW[10] = '/^[0-9]$/';


Титла: Re: PHP проблем с preg_replace()
Публикувано от: b2l в Nov 11, 2010, 19:36
Офф много съм смотан!!! Искаш само букви еми ок:
Код
GeSHi (PHP):
  1. $pattern = '/^[^a-zA-Z]$/'

Георги Чорбаджийски на една лекция каза: "Не проверявайте за грешно въведени данни, проверявайте за правилно въведени такива."


Титла: Re: PHP проблем с preg_replace()
Публикувано от: chen_dzen в Nov 11, 2010, 19:46
Направих го 0-9 но грешката е същата . Не ме разбираш символите ще ги има просто искам да ги игнорирам .


Титла: Re: PHP проблем с preg_replace()
Публикувано от: b2l в Nov 11, 2010, 19:51
Код
GeSHi (PHP):
  1. $output = preg_replace('/[^A-Za-z]/', ' ', $input);
Ако и това не работи вече не знам...

Ако input-а ти е на български:
Код
GeSHi (PHP):
  1. $output = preg_replace('/[^А-Яа-я]/u', ' ', $input);


Титла: Re: PHP проблем с preg_replace()
Публикувано от: chen_dzen в Nov 11, 2010, 19:59
Обратния ефект някои ако мойе да ми помогне да го постигна . Иначе благодаря backtolife .  [_]3


Титла: Re: PHP проблем с preg_replace()
Публикувано от: b2l в Nov 11, 2010, 19:59
Обратния ефект някои ако мойе да ми помогне да го постигна . Иначе благодаря backtolife .  [_]3

Кой обратен ефект?


Титла: Re: PHP проблем с preg_replace()
Публикувано от: chen_dzen в Nov 11, 2010, 20:03
ами в момента всички тези символи зе заменят с интервал а аз искам само те а не се променят .  ;)


Титла: Re: PHP проблем с preg_replace()
Публикувано от: b2l в Nov 11, 2010, 20:06
ами в момента всички тези символи зе заменят с интервал а аз искам само те а не се променят .  ;)

До колкото чета в 1-вия пост искаш всичко което не е буква да става на интервал нали?

ами в момента всички тези символи зе заменят с интервал а аз искам само те а не се променят .  ;)
Кои те?


Титла: Re: PHP проблем с preg_replace()
Публикувано от: chen_dzen в Nov 11, 2010, 20:10
Символите А-Za-z


Титла: Re: PHP проблем с preg_replace()
Публикувано от: b2l в Nov 11, 2010, 20:14
Код
GeSHi (PHP):
  1. $output = preg_replace('/[^A-Za-z]/', ' ', $input);
Ако и това не работи вече не знам...

Ако input-а ти е на български:
Код
GeSHi (PHP):
  1. $output = preg_replace('/[^А-Яа-я]/u', ' ', $input);

Това трябва да работи бе??? Значи [a-zA-Z] - напасва всички букви от азбуката. [^a-zA-Z] - всички символи които са различни от азбуката. Сигурен ли си че имаш "^" в pattern-а?


Титла: Re: PHP проблем с preg_replace()
Публикувано от: chen_dzen в Nov 11, 2010, 20:21
аааааааааааааааааааааааааа кланям ти се ти си велик човече !


Титла: Re: PHP проблем с preg_replace()
Публикувано от: b2l в Nov 11, 2010, 20:21
аааааааааааааааааааааааааа кланям ти се ти си велик човече !

Стана ли? Така би трябвало да работи.


Титла: Re: PHP проблем с preg_replace()
Публикувано от: chen_dzen в Nov 11, 2010, 20:22
да супер е благодаря ти много  [_]3  [_]3  [_]3  [_]3


Титла: Re: PHP проблем с preg_replace()
Публикувано от: chen_dzen в Nov 11, 2010, 20:28
Вече си ми идол .  :D  ;D  :D


Титла: Re: PHP проблем с preg_replace()
Публикувано от: morbid_viper в Nov 12, 2010, 09:31
Все пак ти препоръчвам да прочетеш „How to Create Patterns“ от 10 глава на „Perl 5 by Example“, например от тук: http://affy.blogspot.com/p5be/ch10.htm
Това е едно от най-лесносмилаемите обяснения за регулярните изрази в Perl.
Казвам Perl,  защото PCRE=PerlCompatibleRegExp, т.е. библиотека, която да има свойствата като на вградените в Perl оператори. С други думи (почти) всичко каквото прочетеш за Perl е приложимо и за други езици, включително PHP чрез функциите pcre_*
И надявам се, тогава няма дори да ти идват до акъла нещата, които си написал в началото на темата – все пак регулярните изрази са за мързеливи хора  :-)


А ето и една малко по-теоретична стара лекция по въпроса:
http://conf.linux-bg.org/fb/data/2006-10/prezentacii/linux-bg_conf_Oct-2006.odp


Титла: Re: PHP проблем с preg_replace()
Публикувано от: chen_dzen в Nov 13, 2010, 09:23
Мерси чичка !