Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zaawansowane wyrażenia w preg_replace
Forum PHP.pl > Forum > PHP
LamaMASTER
Witam,
Stworzyłem sobie skrypt, który sprawdza błędy popełniane przez użytkowników na moim forum, poprawia je i zaznacza co zrobili źle (potem mogą zedytować posta i poprawić, żeby sprawdzacz już się nie rzucał). Rozwijam sprawdzacza i rozwijam i w końcu stoję w miejscu. Chciałbym pozbyć ludzi nawyku używania dwóch pytajników (debilny pomysł twórców GG zrobił z internetu syf). Przykładowo:
- Jak się nazywasz??
ma poprawić na:
- Jak się nazywasz?
gdzie pytajnik będzie na czerwono czy coś (to sobie zrobię). To jest banał - prosta regułka w str_replace. Chciałbym jednak do tego użyć preg_replace tak, aby poprawiał tylko dwa wykrzykniki, a jeżeli jest ich więcej to zostawił w spokoju. Np.:
- Jak się nazywasz??
na:
- Jak się nazywasz?
a:
- Co ty gadasz?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?
zostawiał jak jest.
Niestety w powyższym przykładzie zamienia po dwa pytajniki po kolei. Wymyśliłem tak, żeby zamieniał tylko pytajniki ze spacją na końcu - było OK, ale nie zawsze user stawia spację po pytaniu, dlatego to też się nie sprawdza.

Druga rzecz - chciałbym dzięki preg_replace ustawić wstawianie przecinków przed "że" automatycznie. Przykład:
- Myślę że blablabla
zamienia na:
- Myślę, że blablabla
Też niby proste:
preg_replace("#(*.?)że(*.?)#si", '\\1, że \\2' ...
No dobra, ale wtedy jak user już wstawił przecinek:
- Myślę, że blablabla
to w wyniku mam:
- Myślę,, że blablabla

Z góry dzięki za pomoc.
dyktek
  1. <?php
  2. if(preg_match(wykryj czy jest przecinek przez że))
  3. preg_replace("#(*.?)że(*.?)#si", '1, że 2'
  4. ?>


?
ave
dyktek ale pomagasz ohmy.gif

co do 1 to
  1. <?php
  2. echo preg_replace('!(??){2}!','?',$zdanie);
  3. ?>

powinno dzialac
siemakuba
a co do 2:
  1. <?php
  2. $str = "myślę że tak działa i, że jest OK";
  3. $str = preg_replace('/([^,])?+(s)(że)(s)/i', '1,234', $str);
  4.  
  5. // wynik: myślę, że tak działa i, że jest OK
  6. ?>


pozdr.
dr_bonzo
/[^!]([!]{2})[^!]/
powinno zlapac dwa wykrzykniki a wokol nich po jednym znaku nie bedacym wykrzyknmikiem.
LamaMASTER
Wielkie dzięki.
Teraz dalszy problem - co jeżeli ktoś napisze "Uważam tak, mimo że blablabla" - to jest poprawnie napisane, a skrypt wstawi przecinek przed "że" smile.gif Da się wstawić jakieś wyjątki? W najgorszym wypadku będę musiał z tego zrezygnować.
dr_bonzo
Moim zdaniem wyciagasz dzialo na muche -- po co ci taki system i tak wsyzstkiego nie wylapiesz, taki Office pisany pewnie przez setke ludzi nie poradzi sobie z wszystkimi przypadkami, a co dopiero twoj pisany w pojedynke z podstawowymi umiejetnosciami. Userzy i tak beda pisac niepoprawnie.

Cytat
Chciałbym pozbyć ludzi nawyku używania dwóch pytajników (debilny pomysł twórców GG zrobił z internetu syf)
- Jak się nazywasz??
ma poprawić na:
- Jak się nazywasz?


To ich niczego nie nauczy -- wpisza blednie, system to zaakceptuje i poprawi a user zobaczy (lub nawet nie zwroci na to uwagi) poprawna wersje i nie zrozumie ze ma pisac poprawnie; skuteczniejszy bedzie chyba "ban za questionmark.gif".
Moja rada: lepiej zajmij sie funkcjonalnoscia systemu a nie taka pierdola co zajmuje kupe czasu, jest trudna a efekty beda pewnie mizerne, ale decyzja nalezy do ciebie.
LamaMASTER
No masz rację. Jednak mój skrypt działa tak, że raportuje jak ktoś zrobi questionmark.gif to ma tak:
? [Auto sprawdzacz: złamano punkt regulaminu nr. jakiś tam] i ten napis jest tak oczojebny, że user musi poprawić post smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.