regexp

w dziale Strony WWW w Operze
rejdzu napisał(a):

Mam pytanie odnosnie regexp w operze. W IE oraz FF to wyrazenie dziala, jednak w operze nie. Tzn wyrazenie dziala, ale nawet znaki z poza zakresu traktowane sa jako wystepujace w badanym stringu i illegalChar zwracane jest jako tablica.


re = /[\u0200-\uFFFF]/gi;
illegalChar = pole.value.match(re);


Potrzebuje zrobic sprawdzenie, czy uzytkownik nie wkleil jakis znakow specjalnych unicode do pola tekstowego. Jest to zabezpieczenie przed kopiowaniem dokumentow worda do pola memo. Znaki specjalne worda powoduja bledy zapytan sql-a.

Sprawdzanie po kodach ascii dziala, jednak nie obejmuje calego zakresu dostepnych znakow

Sombria napisał(a):

Originally posted by rejdzu:

re = /[\u0200-\uFFFF]/gi;

Skoro określasz zakres w ten sposób, to flaga i jest ci niepotrzebna, a powinno działać lepiej. I tak z ciekawości zapytam dlaczego akurat taki zakres?

A co do zachowania Opery, to wygląda na błąd (chyba). Inna sprawa, że nie powinien to być aż tak wielki problem, bo tak czy inaczej, sprawdzanie powinno być dodatkowo zorganizowane po stronie serwera.

rejdzu napisał(a):

Poniewaz znaki pasujace koncza sie na \u0200. I aby sie zabezpieczyc i nie sprawdzac reszty ustawiony zostal koniec zakresu unicode czyli \uFFFF. Projekt robiony jest w oparciu o technologie Magic E-Developer i nie ma raczej mozliwosci sprawdzenia wpisanej danej po stronie serwera.

rejdzu napisał(a):

Rzeczywiscie pomoglo usuniecie dodatkowych opcji gi. Dla mnie to nie problem bo blad bedzie zglaszany za kazda proba wyslania formualrza. Po usunieciu pierwszego znaku i submita pojawi sie nastepne ewentualne wystapienie. Jednak jezeli ktos chce od razu dostac sie do tablicy znakow, ktore zostaly znalezione to juz ma problem. Na glownym forum opery zglosil ktos ten blad jako bug.

Sombria napisał(a):

Originally posted by rejdzu:

Rzeczywiscie pomoglo usuniecie dodatkowych opcji gi. (...) Jednak jezeli ktos chce od razu dostac sie do tablicy znakow, ktore zostaly znalezione to juz ma problem.

Ale za globalne wyszukiwanie odpowiada flaga g, a problem powoduje flaga i, więc nie rozumiem w czym problem.

EDIT: Jeśli nie potrzebujesz globalnego wyszukiwania, to raczej używaj search a nie match.

Zajec napisał(a):

Jeśli za pomocą JS będziesz się bronił przed ewentualnym atakiem SQL Injection to... gratulacje. Lepiej już teraz dopracuj zapytania do bazy MySQL.